我尽可能简单地重新创建了我的错误,它是这样的:
我有一个c#Web Api项目,我安装了CORS Web Api nuget包。然后我将它添加到WebApiConfig.cs的注册函数中:
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
然后我创建了一个非常简单的" GetToken" api,贴在下面:
[Route("~/api/auth/token")]
public HttpResponseMessage GetToken()
{
var result = new
{
FirstName = "matt"
};
var response = Request.CreateResponse(HttpStatusCode.OK, result);
HttpContext.Current.Response.Headers.Set("Access-Control-Allow-Headers", "Authorization");
HttpContext.Current.Response.Headers.Set("Access-Control-Expose-Headers", "Authorization");
HttpContext.Current.Response.Headers.Set("Authorization", "test");
//HttpContext.Current.Response.Headers.Set("Access-Control-Allow-Methods", "GET, OPTIONS");
//HttpContext.Current.Response.Headers.Set("Access-Control-Allow-Credentials", "true");
//HttpContext.Current.Response.Headers.Set("Access-Control-Allow-Origin", "http://run.plnkr.co/");
return response;
}
注释掉的代码只是我用来尝试解决此问题的Header配置的许多组合中的一部分。在web api之后,我在plunker中创建了一个非常基本的api调用:
var Test1 = function() {
$.ajax("http://localhost:61826/api/auth/token", {
type: "GET",
success: function(data, status, xhr) {
debugger;
},
error: function(err) {
debugger;
},
crossDomain: true
});
}
我还创建了一个角度版本,如果有人需要,我会分享。
最终结果。在chrome中,它可以很好地工作,你可以在这里看到(授权标题在那里):
但是在Safari中它不起作用,你可以在这里看到(缺少授权标题):
我已经在这个问题上撞了很多天,现在是时候带上社区了。谁能告诉我到底发生了什么?
答案 0 :(得分:0)
嘿,而不是手动设置公开标题,你试过这样做吗
//set in the webapiconfig
config.EnableCors(new EnableCorsAttribute("*", "*", "*", "Authorization"));
[Route("~/api/auth/token")]
public HttpResponseMessage GetToken()
{
var result = new
{
FirstName = "matt"
};
var response = Request.CreateResponse(HttpStatusCode.OK, result);
response.Headers.Add("Authorization", "test");
return response;
}