Как настроить пользовательские заголовки с помощью web.config?

У меня есть следующее в файле web.config, но после публикации в IIS 7.5 на сервере их не удалось найти в разделе IIS -> HTTP Response Headers.

Я обнаружил, что на web.config на сервере нет этих записей, но они были там до публикации. Поэтому я могу только сказать, что процесс публикации удалил их, но в файлах преобразования web.config нет ничего, что их удаляет. Итак, почему они исчезли из опубликованного `web.config '?

 <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
        <add name="Access-Control-Allow-Methods" value="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" />
      </customHeaders>
    </httpProtocol>
</system.webServer>

Ответ 1

Вы уверены, что web.config - лучшее место для этого? Я, как правило, предпочитаю Custom ActionFilter's. Это дает вам возможность выбирать, когда (по каким методам) вы хотите, чтобы логика возникла, а также предлагает гораздо больший контроль (особенно обработка исключений, что делать на различных этапах жизненного цикла Action).

Microsoft рекомендует использовать этот подход для вызовов, которые происходят перед выполнением действия.

Пример кода

    public class CustomFilterAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            //add in your custom headers
            filterContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
            filterContext.HttpContext.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type");
            filterContext.HttpContext.Response.AddHeader("Access-Control-Allow-Methods", "GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS");

            base.OnActionExecuting(filterContext);
        }

        public void OnException(ExceptionContext filterContext)
        {
          //do some cool exception handling here
        }
    }