Как объявить атрибут фильтра глобально в файле Global.asax.cs

Я реализовал один фильтр действий в своем проекте MVC. Теперь я хочу добавить его глобально, чтобы мне не нужно было писать атрибут фильтра прямо над методами действий. Я использую пакет nuget BundleMinifyInlineJsCss.

Я попытался использовать следующий код в файле Global.asax.cs:

GlobalFilters.Filters.Add(new ReplaceTagsAttribute());

Вот мой код фильтра:

 public class ReplaceTagsAttribute : ActionFilterAttribute
 {
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.HttpContext.Response.Filter = new BundleAndMinifyResponseFilter(filterContext.HttpContext.Response.Filter);                         
    }
 }

Я получаю сообщение об ошибке: Фильтрация запрещена. Как я могу объявить это глобально?

Спасибо.


person Ankita    schedule 09.09.2015    source источник
comment
Вы применяете этот атрибут для метода Controller или Action?   -  person Sirwan Afifi    schedule 09.09.2015
comment
Для метода действия. Я могу успешно добавить его, если вручную напишу атрибут в метод Action. Но я хочу добавить это ко всем методам действий.   -  person Ankita    schedule 09.09.2015
comment
попробуй GlobalConfiguration.Configuration.Filters.Add(..).   -  person Amit Kumar Ghosh    schedule 09.09.2015
comment
@AmitKumarGhosh: в файле Global.asax.cs. Правильно?   -  person Ankita    schedule 09.09.2015
comment
@AmitKumarGhosh: выдает ошибку: Nop.Web.Customization.ActionFilter.ReplaceTagsAttribute — это «тип», но он используется как «переменная».   -  person Ankita    schedule 09.09.2015
comment
по-видимому, сообщение об ошибке указывает, что вы используете Type как Variable.   -  person Amit Kumar Ghosh    schedule 09.09.2015
comment
Можете ли вы показать свое полное сообщение об ошибке, особую информацию о трассировке?   -  person Sky Fang    schedule 09.09.2015
comment
@Ankita - вы пытаетесь добавить глобальные фильтры в NopCommerce или простой проект mvc?   -  person Ajinder Singh    schedule 09.09.2015
comment
@AjinderSingh: проект NopCommerce   -  person Ankita    schedule 09.09.2015
comment
@SirwanAfifi: я попробовал ваше решение, но оно все равно выдает ту же ошибку.   -  person Ankita    schedule 09.09.2015
comment
@Ankita - попробуйте опубликованный ответ.   -  person Ajinder Singh    schedule 09.09.2015


Ответы (1)


Я думаю, добавление нулевой проверки будет работать для вас.

    public class ReplaceTagsAttribute : ActionFilterAttribute
 {
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
       var response = filterContext.HttpContext.Response;
 if (response.Filter == null) return; // <-----
response.Filter = new BundleAndMinifyResponseFilter(response.Filter);

    }
 }
person Ajinder Singh    schedule 09.09.2015
comment
Да, теперь это работает. Почему нам нужно это делать? Не могли бы вы объяснить? - person Ankita; 09.09.2015
comment
Кажется, фильтрация в этот момент не разрешена. Поэтому применил проверку, чтобы убедиться, что фильтрация разрешена. - person Ajinder Singh; 09.09.2015
comment
И в какой момент фильтрация запрещена? - person Ankita; 09.09.2015
comment
Я не могу сказать на самом деле. Может быть, попробуйте отлаживать с самого начала и проверять всякий раз, когда вызывается ваш фильтр. - person Ajinder Singh; 09.09.2015