Как украсить контроллер / действия атрибутом со стороны клиента

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

Мой вопрос: есть ли какой-либо способ в MVC 5, который позволяет мне делать украшение со стороны пользовательского интерфейса, например, выбирать между определенными атрибутами, которые могут быть применены к определенным контроллерам или к их действиям из браузера ?

Я знаю, что могу использовать Swagger/Swashbuckle, чтобы перебирать все мои контроллеры и предоставлять их пользователю. Кроме того, я уже написал свой пользовательский атрибут.

Может ли кто-нибудь указать мне направление, которое поможет мне решить эту проблему ?

Я думаю, что может быть решение, которое включает переопределение BaseController таким образом, что каждый вновь созданный контроллер, производный BaseController, будет украшен моим пользовательским атрибутом.

1 ответ

  1. Я не знаю о решении, чтобы решить это, что предусмотрено из коробки.
    Но это все еще можно было решить.

    Я вижу возможные решения:

    Во-первых, пусть все ваши фильтр решить, если он должен быть применен или пропущен.
    Этот подход грязный. Это потребует, чтобы вы применили все фильтры в начале, и в этом случае все фильтры будут вызываться всегда (по крайней мере, для проверки состояния).

    Во-вторых, реализовать свой собственный FilterProvider, который будет возвращать коллекцию применяемых фильтров (например, по некоторым условиям) ( вот статья с простым примером ).
    Я бы рекомендовал этот подход, потому что он выглядит более ясным, и это потребует только одного вызова на запрос, чтобы определить, какие фильтры должны быть применены/вызваны.

    В любом случае, оба подхода потребуют некоторой страницы пользовательского интерфейса для настройки всех этих фильтров, и вам нужно сохранить все эти конфигурации где-то (создайте по крайней мере три таблицы БД: контроллер, действие и фильтр). И эта сохраненная информация будет использована для того, чтобы все это сработало.

    Надеюсь, это поможет.