在ajax中启用cors

本文关键字:cors 启用 ajax | 更新日期: 2023-09-27 18:29:32

我是WCF的初学者,我一直在尝试为IIS中托管的WCF服务启用CORS。我浏览了几篇帖子和Stack Overflow问题,所有的答案都让我找到了不同的解决方案,但都不起作用。

有人能给我解释一下如何做到这一点吗?我尝试创建一个global.asax,并添加begin_request事件来设置头,但没有任何改变。这就是我使用的:

 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("Cache-Control", "no-cache");
                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();
            }
        }

我应该从哪里开始?实现这一目标的最佳方式是什么?

在ajax中启用cors

我假设WCF服务已经启动并运行。在Web.config中修复。在system.webServer部分添加以下部分。

<httpProtocol>
<customHeaders>
    <add name="Access-Control-Allow-Origin" value="*"/>
    <add name="Access-Control-Allow-Headers" value="Content-Type, Accept" />
    <add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS" />
    <add name="Access-Control-Max-Age" value="1728000" />
</customHeaders>
</httpProtocol>

注意


注意!访问控制允许原点设置设置为值"*"。这将允许所有呼叫者都有访问权限。您只能指定您的呼叫者

从您现有的实现来看,它应该可以工作。然而,我稍微调整了一下代码,它对我有效

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", "Authorization, Origin, Content-Type, Accept, X-Requested-With");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000" );
HttpContext.Current.Response.End();
}
}