Я все еще не полностью ясен на том, почему я должен был бы создать фильтры пользовательского действия. Возможно, пара примеров помогла бы.
Есть ли какое-либо действие, просачивается Ваш проект, который Вы чувствуете, необходимая вещь? Возможно, несмотря на это, важный, что Вы снова используете их через все свои проекты MVC?
Я использую фильтр действий «Ведение журнала» для регистрации всех вызовов моих контроллеров с помощью дампа параметров - это может быть очень полезно во время стороннего тестирования, позволяя мне увидеть, как / почему / когда люди взаимодействуют с приложением.
Хотя я и не являюсь фильтром действий, я также помещаю в свои репозитории ловушку регистрации, которая выгружает SQL, сгенерированный любым кодом Linq2SQL ... снова полезно, чтобы точно увидеть, что и когда выполняется.
Мой любимый "must have" Фильтр, который я использую, проверяет модель представления на наличие пустых списков. Если есть, он пытается заполнить их из базы данных. Я в основном использую это для заполнения общих раскрывающихся списков, поэтому мне не нужно вставлять этот код в действие контроллера.
Unsupported Browser Filter(UBF) - проверяет Request.Browser и перенаправляет на страницу загрузки браузера или легковесную страницу.
По умолчанию все наши контроллеры поддерживают только те браузеры, которые поддерживает jQuery. Но программист может пометить контроллер специальным атрибутом для переопределения UBF
Новые глобальные фильтры MVC3 делают использование UBF еще более простым.
Любой публичный веб-сайт, безусловно, нуждается в некотором виде проверки капчи. Так почему бы не использовать ту, которая очень надежна и имеет очень хорошую цель. reCaptcha.
Это повседневный сценарий создания уникальных записей в БД. Предположим, у вас есть сущность Пользователь
. У вас есть все возможные атрибуты проверки, но есть один, который вы не можете добавить. И это то, является ли экземпляр объекта уникальным.
Зачем он вообще нужен?
Это два наиболее распространенных процесса с сущностью Пользователь
, в которых задействована проверка:
Итак, тогда вы создаете нового пользователя, вам, скорее всего, необходимо проверить, является ли он уникальным в вашей БД (имя пользователя, адрес электронной почты или что-то подобное; что-то нужно проверить на уникальность).
Но когда вы делаете обновление, уникальность проверять не нужно, потому что пользователь уже существует в БД.
Используя фильтр действий в действии Создать
. Но поскольку этот вид фильтра должен использоваться для всех типов сущностей, разумно сделать его более универсальным и многоразовым, чтобы мы могли фактически использовать его для всех видов сущностей.
У меня есть два, без которых я не могу жить:
a) AjaxMasterPageInjectorAttribute: задача этого маленького парня - проверить, выполняется ли запрос IsAjax (), а затем переключиться на безхромный AjaxMasterPage как подходящее. Corolarry - это JsonCommandInterceptor - он принимает ответ и при необходимости меняет его на команду Json для сценариев ajax. Позволяет создать единичную цепочку действий, которая при необходимости динамически становится ajaxy.
b) ViewModelWrapperInjectorAttribute: захватывает модель представления и вставляет в своего рода более глобальную ViewModelWrapper для всего сайта. Сохраняет ваши действия сосредоточенными на том, что они должны делать, и отвлекает от бизнеса по заполнению / предоставлению указанного ViewModelWrapper в более инфраструктурное место.