我的Asp.Net5 Web在Chrome上不能工作,这是由于CORS的问题,我的CORS配置似乎与我的OAuthBearerAuthentication冲突。在我的Startup.cs中:
services.AddCors();
services.ConfigureCors(o => o.AddPolicy("AllowAll", p => p.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()));我的控制器看起来像:
[Authorize(OAuthBearerAuthenticationDefaults.AuthenticationScheme)]
[EnableCors("AllowAll")]
public class MyController然后我得到了No 'Access-Control-Allow-Origin' header is present on the requested resource.
但是,如果我删除authorize属性:
[EnableCors("AllowAll")]
public class MyController那我就被允许..。怎么一回事?
发布于 2015-10-15 10:31:41
您只需将以下内容添加到web.config文件的system.webServer部分:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT" />
<add name="Access-Control-Allow-Headers" value="accept, content-length, content-type" />
</customHeaders>
</httpProtocol>根据需要修改方法和标头。您不能在这些标头中使用*。它还允许您使用AJAX请求图像和HTML等内容,而不仅仅是控制器操作服务的资源。
发布于 2015-10-15 07:32:51
首先,清除chrome上的缓存,然后在edge中尝试。Chrome正在吞噬你的错误。
看请求,你应该有2.印前检查和请求本身。
如果印前检查(选项)失败,则甚至不会发出请求。
通常,预检会因为服务器错误500而失败。Exception不包含cors标头,因此这可能是您的问题所在。
好了,现在,问题是chrome不会在任何地方显示错误。所以,你可以在边缘上检查请求,这会给你一个实际的错误(你必须使用开发人员控制台,错误不会在浏览器上显示)或使用fiddler。
现在你可以看到你的错误,你可能知道如何继续,但添加一点我自己面对的东西:
services.AddMvc(),这已经将cors添加到流水线中了,所以再次使用services.AddCors()添加它会抛出一个键已经找到的异常。(我认为这是一个错误,可能会在github上提交一个问题)。services.ConfigureCors(options => options.AddPolicy("AllowAll",P => p.AllowAnyOrigin() .AllowAnyMethod() .AllowCredentials() .AllowAnyHeader());
app.UseCors("AllowAll");。
app.MapWhen,请注意MapWhen派生,因此您可能需要为所有需要cors的分支指定UseCors,例如您的MapWhen端点。(如果你不知道我在说什么,那就忽略它。)https://stackoverflow.com/questions/33112288
复制相似问题