Safari和CORS:自定义响应标头消失

时间:2014-08-17 03:35:44

标签: ajax safari cors asp.net-web-api

我尽可能简单地重新创建了我的错误,它是这样的:

我有一个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中,它可以很好地工作,你可以在这里看到(授权标题在那里):

enter image description here

但是在Safari中它不起作用,你可以在这里看到(缺少授权标题): enter image description here

我已经在这个问题上撞了很多天,现在是时候带上社区了。谁能告诉我到底发生了什么?

1 个答案:

答案 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;
}