CORS已启用,但仍然拒绝访问

时间:2018-02-08 20:50:23

标签: c# asp.net-mvc asp.net-web-api xmlhttprequest cors

作为参考,我使用的是Visual Studio 2017和Windows 10。

我有一个MVC webapi项目,它使用Visual Studio提供的模板设计,帐户存储在SQL数据库中。我有另一个项目,即用户登录的网站本身。我正在尝试在VS中进行调试,但只要在初始登录之外发出GET请求,就会遇到访问被拒绝错误消息。我已经在webapi上启用了CORS,但它似乎并没有太大的区别。

以下是我启用CORS的方法。

在WebAPIConfig文件中,我有以下内容:

 public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.EnableCors();

        // Web API configuration and services
        // Configure Web API to use only bearer token authentication.
        config.SuppressDefaultHostAuthentication();
        config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

然后在Web.config文件中我有这个:

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
    <add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" />
    <add name="Access-Control-Allow-Credentials" value="true" />
  </customHeaders>
</httpProtocol>

这是来电网站的代码:

function getProfilePicture(username){
    var returnValue = [];

    jQuery.support.cors = true;
    if (window.XMLHttpRequest) {
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.open("GET", 'http://localhost:60690/api/ProfilePicture?Username=' + username, false);
        xmlhttp.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
        xmlhttp.setRequestHeader('Authorization', 'Bearer ' + localStorage.getItem('accessToken'));
        xmlhttp.send();
        if (xmlhttp.status == 200) {
            returnValue = jQuery.parseJSON(xmlhttp.responseText);
        }
    }
    return returnValue;
}

错误消息显示“SCRIPT7002:XMLHttpRequest:网络错误0x80070005,访问被拒绝。”

我没有正确启用CORS吗?

更新

我下载了Postman以试图弄清楚这个问题。我实际上能够在没有任何错误的情况下与Postman进行GET调用。它正在返回数据和一切。我注意到的一件事是看起来实际上没有发送Authorization标头。它在Fiddler的数据中缺失。

1 个答案:

答案 0 :(得分:1)

Access-Control-Allow-Credentials: true指定为响应标头不兼容Access-Control-Allow-Origin: *。如果您要使用凭据,必须使用Access-Control-Allow-Origin: <value-of-origin-request-header>