Создайте общий WebAPI, который может использовать имя таблицы в качестве параметра, и возвращать данные из таблицы, которые передаются в качестве параметра. - PullRequest
0 голосов
/ 08 мая 2019

Я новичок в веб-API, хочу создать API, который может использовать имя таблицы в качестве параметра и возвращать данные таблицы, которые передаются в качестве имени параметра во время выполнения. Как мы можем добиться этого с помощью c #?

У меня настроена модель данных сущности для моей базы данных. Невозможно выяснить, как разработать общий API, который будет возвращать данные таблицы в зависимости от имени таблицы, отправляемого в качестве параметра

 // GET: api/PickLists
        public IQueryable<PickList> GetPickLists()
        {
            return db.PickLists;
        }

Приведенный выше код возвращает мне данныеиз упомянутой таблицы, Как я могу сделать это универсальным, чтобы возвращать таблицу в зависимости от имени параметра (который содержит имя таблицы базы данных)

1 Ответ

0 голосов
/ 08 мая 2019

Вы можете использовать шаблон фабрики для получения нужного контекста БД, задав указанный параметр:

public class DbContextFactory {

    private readonly TodoContext todoContext;
    private readonly OtherContext otherContext;

    // Uses dependency injection
    public DbContextFactory(TodoContext todoContext, OtherContext otherContext) {
        this.todoContext = todoContext;
        this.otherContext = otherContext;
    }

    // maybe its better to use a custom Repository Interface here as return type that has a "FetchAll" method
    public DBContext Get(string parameter) {
        switch(parameter) {
            case "todo":
                return this.todoContext;
           break;
           ...
        }
    }
}

Я рекомендую использовать эту фабрику в качестве единичного экземпляра, предпочтительно с использованием внедрения зависимостей ASP.net(зарегистрируйтесь как сервис)

[Route("table/{tableName}")]
public IEnumerable<object> GetTableByName(string tableName) { 
   return this.dbContextFactory.Get(tableName).FetchAll();
}

Имейте в виду, что последний код - только псевдокод.Убедитесь, что вы разрешаете доступ к этой конечной точке только тем пользователям, которые имеют правильные права доступа, и разрешают доступ только к тем таблицам, к которым у пользователя есть доступ.

...