【发布时间】:2017-08-05 19:35:17
【问题描述】:
是的,我知道你在想什么——又是一个 CORS 问题,但这次我被难住了。
所以开始,实际的错误信息:
XMLHttpRequest 无法加载 http://localhost/Foo.API/token。这 响应中“Access-Control-Allow-Origin”标头的值必须 当请求的 凭据模式为时,不是通配符 '*' '包括'。因此,不允许使用 Origin 'http://localhost:5000' 使用权。发起请求的凭证模式 XMLHttpRequest 由 withCredentials 属性控制。
我不确定凭据模式是“包含”是什么意思?
所以当我在邮递员中执行请求时,我遇到no这样的错误:
但是当我通过我的 angularjs 网络应用程序访问相同的请求时,我被这个错误难住了。这是我的 angualrjs 请求/响应。如您所见,回复是 OK 200,但我仍然收到 CORS 错误:
提琴手请求和响应:
下图展示了从 Web 前端到 API 的请求和响应
所以根据我在网上阅读的所有其他帖子,似乎我在做正确的事情,这就是我无法理解错误的原因。最后,这是我在 angualrjs(登录工厂)中使用的代码:
API 中的 CORS 实现 - 参考目的:
使用的方法一:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
EnableCrossSiteRequests(config);
}
private static void EnableCrossSiteRequests(HttpConfiguration config)
{
var cors = new EnableCorsAttribute("*", "*", "*")
{
SupportsCredentials = true
};
config.EnableCors(cors);
}
}
使用的方法2:
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
ConfigureOAuth(app);
WebApiConfig.Register(config);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(config);
}
【问题讨论】:
-
漂亮的图片,它们是什么?要回答您的问题,如果您包含身份验证,则 access-control-allow-origin 响应必须是原始(浏览器页面)主机,它不能是
*- 所以,服务器端做错了 CORS - 哦,邮递员可以工作,因为它不是跨源请求 -
@JaromandaX,感谢您的回复。图片展示了请求/响应以及正在传递的标头。你问这个问题,显然表明它没有达到它的目标......
-
我的评论应该是你需要知道的全部 - 不需要看图片
-
所以最近我决定在我的 web api 上放弃 cookie,而是使用令牌。当我使用 cookie 时,我的 CORS 可以正常工作。所以我很难理解 CORS 是如何在服务器端正确实现的
-
如果包含身份验证,
access-control-allow-origin响应必须是原始(浏览器页面)主机,不能是*
标签: javascript c# angularjs cors asp.net-web-api2