【发布时间】:2017-05-15 18:38:12
【问题描述】:
我有一个 ASP.NET Web API 2 服务。并且多个客户端(角度)应用程序与该服务对话。应用程序和服务发布在不同的子域上,如下所示:
service.mydomain.com
app1.mydomain.com
app2.mydomain.com
我使用 Microsoft.AspNet.WebApi.Cors - NuGet 包来启用 CORS,它工作正常,除了一种情况: 当用户打开一个应用程序 (app1.mydomain.com) 时。 然后导航到另一个 (app2.mydomain.com)。然后按浏览器后退按钮。以下 CORS 错误:
The 'Access-Control-Allow-Origin' header has a value 'http://app2.mydomain.com' that is not equal to the supplied origin.
Origin 'http://app1.mydomain.com' is therefore not allowed access
我配置了 Microsoft.AspNet.WebApi.Cors - NuGet 包,如下:
public static void Register(HttpConfiguration config)
{
var cors = new EnableCorsAttribute(
//to-do allow cross domains for all maarif.com sites
origins: "*", //and also tried "http://app1.mydomain.com, http://app2.mydomain.com" gives same result
headers: "*",
methods: "*") {SupportsCredentials = true};
config.EnableCors(cors);
}
我在服务器上跟踪了 Origin 标头值。 我将以下代码放在服务“global.asax”中:
protected void Application_BeginRequest()
{
var origin = HttpContext.Current.Request.Headers["Origin"];
if (origin != null )
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", origin);
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "*");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "*");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Credentials", "true");
}
}
当用户单击“app2.mydomain.com”到“app1.mydomain.com”的返回按钮时会出现问题,请求发送的来源是“app2.mydomain.com”,这就是服务允许访问:HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", 'app2.mydomain.com');
有什么办法吗?
请注意,我不能输入“*”,因为请求已经过身份验证。
【问题讨论】:
标签: angularjs asp.net-web-api cors