我有Asp.NET核心Web API应用程序,并试图实现授权,但遇到CORS问题 - 我的开发服务和用户界面主机在本地主机的不同端口上。Asp.NET核心:跨服务请求(预检)返回代码204而不是200
在登录页面我得到令牌并重定向到下一页。此时数据请求服务启动。但随着状态204服务器响应:没有内容预检请求...... 虽然预检响应返回访问控制允许来源:* ...
的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();
}
我错过了服务器端的东西吗? (在客户端角度的拦截器只是添加授权标头与令牌)
P.S.我使用VS代码在OSX发展(尽管我想这并不重要)
UPDATE:
为@tpeczek谏,我已经改变CORS配置:
options.AddPolicy("Policy",
builder => builder.WithOrigins("http://localhost:80", "http://localhost")
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
但可以”牛逼摆脱错误更新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.
但是,一旦我从控制器中删除[Authorize]
属性,它工作正常。所以问题在于令牌检查?
更新3: 在意外删除的问题的功能: - (现在工作
'204 NO CONTENT'您的控制器/中间件是否返回任何数据? –
@JoelHarkes中间件返回“await context.Response.WriteAsync(JsonConvert.SerializeObject(response,new JsonSerializerSettings {Formatting = Formatting.Indented}));”当获得令牌时。去数据时,中间件不会返回任何东西。没有到达控制器。我使用的唯一中间件是从https://stormpath.com/blog/token-authentication-asp-net-core – user1820686
得到的如果这仍然不起作用,请在问题中包含预检请求标头。 – tpeczek