【发布时间】:2018-07-19 13:25:15
【问题描述】:
作为参考,我使用的是 Visual Studio 2017 和 Windows 10。
我有一个使用 Visual Studio 提供的模板设计的 MVC webapi 项目,其中的帐户存储在 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: Network Error 0x80070005, Access is denied.”
我没有正确启用 CORS 吗?
更新
我下载了 Postman 试图找出问题所在。我实际上可以使用 Postman 进行 GET 调用而不会出现任何错误。它正在返回数据和所有内容。我确实注意到的一件事是它看起来不像 Authorization 标头实际上正在发送。 Fiddler 中的数据中缺少它。
【问题讨论】:
-
您可能希望在没有正常 appConfig 构造的情况下进行测试: string corsDomain = ConfigurationManager.AppSettings["CorsAllowedDomain"]; EnableCorsAttribute cors = new EnableCorsAttribute(corsDomain, "", "") { SupportsCredentials = true }; config.EnableCors(cors);尝试将“CorsAllowedDomain”设置为“*”。
-
@programmerj 这样做会让我收到此错误消息“CORS 响应不允许使用多个 Access-Control-Allow-Origin 标头。” :(
标签: c# asp.net-mvc asp.net-web-api xmlhttprequest cors