如何使用web.config设置自定义标头?

Ray*_*eng 10 iis-7.5 windows-server-2008-r2 asp.net-mvc-4 visual-studio-2012

我在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>
Run Code Online (Sandbox Code Playgroud)

rob*_*pim 2

您确定 web.config 是执行此操作的最佳位置吗?我更喜欢自定义 ActionFilter。这使您有机会选择希望逻辑发生的时间(在什么方法上),并且还提供更多的控制(特别是异常处理,在 Action 生命周期的各个阶段做什么)。

Microsoft建议对 Action 执行之前发生的调用使用此方法。

一些示例代码

    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
        }
    }
Run Code Online (Sandbox Code Playgroud)