作为参考,我使用的是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的数据中缺失。
答案 0 :(得分:1)
将Access-Control-Allow-Credentials: true
指定为响应标头不兼容与Access-Control-Allow-Origin: *
。如果您要使用凭据,必须使用Access-Control-Allow-Origin: <value-of-origin-request-header>
。