2015-09-09 2 views
3

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

Я попытался с следующим кодом в файле 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);       
    } 
} 

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

Спасибо.

+0

Вы применяете этот атрибут для метода контроллера или действия? –

+0

Метод действия. Я могу успешно добавить его, если вручную написать атрибут Action Method. Но я хочу добавить это ко всем методам действий. – Ankita

+0

попробуйте 'GlobalConfiguration.Configuration.Filters.Add (..)'. –

ответ

2

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

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); 

    } 
} 
+0

Да, теперь это работает. Почему мы должны это делать? Не могли бы вы объяснить? – Ankita

+0

Кажется, что фильтрация в этот момент не разрешена. Так что примените проверку, чтобы убедиться, что фильтрация разрешена. –

+0

И в этот момент фильтрация запрещена? – Ankita

Смежные вопросы