C# 为ASP.NET Web窗体ApicController启用Http选项飞行前请求

C# 为ASP.NET Web窗体ApicController启用Http选项飞行前请求,c#,asp.net-web-api,cors,C#,Asp.net Web Api,Cors,我有一个带有两个API控制器的ASP.NET web表单应用程序。 我的一个控制器收到来自不同域的请求。由于此请求包含授权标头,浏览器将发送飞行前请求(HTTP选项)。 首先,我尝试在web配置中添加以下内容: <httpProtocol> <customHeaders> <add name="Access-Control-Expose-Headers " value="WWW-Authenticate"/> <add name="

我有一个带有两个API控制器的ASP.NET web表单应用程序。 我的一个控制器收到来自不同域的请求。由于此请求包含授权标头,浏览器将发送飞行前请求(HTTP选项)。 首先,我尝试在web配置中添加以下内容:

 <httpProtocol>
  <customHeaders>
    <add name="Access-Control-Expose-Headers " value="WWW-Authenticate"/>
    <add name="Access-Control-Allow-Origin" value="*"/>
    <add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, PATCH, DELETE"/>
    <add name="Access-Control-Allow-Headers" value="accept, authorization, Content-Type"/>
    <remove name="X-Powered-By"/>
  </customHeaders>
</httpProtocol>
困扰我的是,这段代码为所有web API控制器启用了飞行前请求,我只想为我的一个控制器启用它。
我知道我可以使用带有[HttpOptions]注释的函数来解决它,但我不想为控制器中的每个函数添加它。是否有办法为所有控制器功能启用此方法?

将此方法添加到Global.asax.cs并将此代码

using System.Web;

namespace Example
{
    public class Global : System.Web.HttpApplication
    {
        protected void Application_BeginRequest(object sender, EventArgs e)
        {
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
            if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
            {
                HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
                HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
                HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
                HttpContext.Current.Response.End();
            }
        }
    }
}

将此方法添加到Global.asax.cs并将此代码

using System.Web;

namespace Example
{
    public class Global : System.Web.HttpApplication
    {
        protected void Application_BeginRequest(object sender, EventArgs e)
        {
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
            if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
            {
                HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
                HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
                HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
                HttpContext.Current.Response.End();
            }
        }
    }
}

非常感谢您的帮助,我不知道为什么,但EnableCors对我不起作用。我的项目是web表单而不是MVC,所以我没有WebApiConfig。cs@TalHumy,但您的问题包含Web Api,而且Web Api项目不可能没有WebApiConfig.cs。如果您的项目是web表单,那么请使用适当的关键字编辑您的问题,以便其他stackoverflow访问者不会感到困惑。我添加了仅供您参考的属性,我在controller或method@Tal之前也提到了该属性Humy@D-我不明白你最后的评论,你能不能换一种说法:-)?在Api控制器中,我们也可以定义Cors@TalHumyThank非常感谢你的帮助,我不知道为什么,但是EnableCors对我不起作用。我的项目是web表单而不是MVC,所以我没有WebApiConfig。cs@TalHumy,但您的问题包含Web Api,而且Web Api项目不可能没有WebApiConfig.cs。如果您的项目是web表单,那么请使用适当的关键字编辑您的问题,以便其他stackoverflow访问者不会感到困惑。我添加了仅供您参考的属性,我在controller或method@Tal之前也提到了该属性Humy@D-我不明白你最后的评论,你能不能把它改一下:-)?在Api控制器中,我们也可以定义Cors@TalHumy