我有一个ASP.NET Web API 2服务。多个客户端(角度)应用程序会与该服务进行交谈。该应用程序和服务都发表了不同的子域,如下所示:CORS浏览器后退按钮错误
service.mydomain.com
app1.mydomain.com
app2.mydomain.com
我用Microsoft.AspNet.WebApi.Cors - NuGet包启用CORS,它做工精细,除了一个场景: 当用户打开一个应用程序(app1.mydomain.com)时。 然后导航到另一个(app2.mydomain.com)。然后按下浏览器后退按钮。所述follwoing 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');
任何解决方法?
请注意,我不能放'*',因为请求已通过身份验证。
其实我使用, Web Api项目使用'global.asax'文件而不是'StratUp.cs' 我试图HttpContext.Current.Response.AddHeader(“Access-Control-Allow-Origin”,“app1.mydomain.com,app2.mydomain。 COM“); – yass
好吧,你更喜欢...但你有没有试过像我向你建议的? ..它工作吗? –
我这样说:HttpContext.Current.Response.AddHeader(“Access-Control-Allow -Origin”,“app1.mydomain.com,app2.mydomain.com”);但它不工作,它不接受标题值中的多个域,错误表示它必须是单个域 – yass