Удалите Pragma: no-cache из заголовка, используя фильтр Action в ядре Asp.net MVC. - PullRequest
1 голос
/ 19 июня 2019

Я пытаюсь удалить Pragma: no-cache из заголовка, используя фильтр действий C #, но не получаю никакой удачи.

Я использовал ARR на своем веб-сайте для кэширования диска. Но на моем сайте есть несколько страниц, не требующих кеширования диска.

Для этого мне нужно удалить Pragma или любой другой элемент управления кэшем из заголовка. Так что страницы не включаются в дисковый кеш.

Я пробовал ниже код

  public override void OnActionExecuting(ActionExecutingContext filterContext)
  {
        // here condition of my action method and controller name
       HttpContext.Response.Headers.Remove("Pragma", "no-cache");
                       //OR
       HttpContext.Request.Headers.Remove("Pragma", "no-cache");   

  } 

Но все же мой метод действия содержит Прагму

Если я обновлю в файле web.config значение заголовка remove / update, чем удалить его из всех методов сайта.

Так что, если возможно, удалите этот фильтр действий формы, чем это хорошо для нас.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 19 июня 2019

Вы можете сделать это с помощью Middleware - вы также сможете адаптировать приведенный ниже код в Filter, хотя я и не пробовал.

По сути, @AliBahrami говорит, что вы не можете изменить заголовки после начала ответа - поэтому вам нужно предоставить функцию, которая будет вызываться фреймворком, который сделает это за вас - Response.OnStarting в следующем примере:

        public static IApplicationBuilder UseNoCachingPolicy( this IApplicationBuilder applicationBuilder )
        {
            return applicationBuilder.Use( async (context, next) => {
                    if(/*this request is one I don't want to cache*/)
                    {
                        context
                                .Response
                                .OnStarting( state => {
                                                var responseContext = (HttpContext)state;
                                                //remove the header you don't want in the `responseContext`
                                                return Task.CompletedTask;
                                     }, context );
                    }

                    await next();
            });
        }
...