我有Asp.NET Core Web API应用程序并试图实现授权但遇到了CORS问题 - 我的开发服务和ui主机在localhost的不同端口上.
在登录页面上,我获得令牌并重定向到下一页.此时,对服务的数据请求开始.但服务器响应的状态为204:没有预检请求的内容...虽然,预检响应返回Access-Control-Allow-Origin:*...
Startup.cs看起来像:
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddCors(options =>
{
options.AddPolicy("Policy",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader() );
});
services.AddAuthorization();
services.AddMvc() // ...
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseCors("Policy");
app.UseMvc();
}
Run Code Online (Sandbox Code Playgroud)
我是否会错过服务器端的内容?(在客户端,angular的拦截器只添加带有令牌的Authorization头)
PS我在OSX上使用VS Code进行开发(尽管我认为这并不重要)
更新:
正如@tpeczek建议的那样,我将cors配置更改为:
options.AddPolicy("Policy",
builder => builder.WithOrigins("http://localhost:80", "http://localhost")
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials() );
Run Code Online (Sandbox Code Playgroud)
但无法摆脱错误
更新2:
我得到的错误是
XMLHttpRequest cannot load localhost:5000/api/<method-name>;. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'localhost'; is therefore not allowed access. The response had HTTP status code 500.
Run Code Online (Sandbox Code Playgroud)
但是一旦我[Authorize]从控制器中删除属性,它就可以了.所以问题在于令牌检查?
更新3:问题在于意外删除了功能: - (立即工作
tpe*_*zek 13
该204 NO CONTENT状态代码是完全合法CORS预检响应(见这里).
您的问题是由您请求包含Authorization标题的事实导致的,该标题使其成为"凭证请求".在这种情况下你不能使用通配符Access-Control-Allow-Origin,你必须指定Access-Control-Allow-Credentials(你可以在这里阅读更多)
services.AddCors(options =>
{
options.AddPolicy("Policy", builder => builder
.WithOrigins("<Origin One>", "<Origin Two>", ...)
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials()
);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5560 次 |
| 最近记录: |