我有CORS到位并正在工作。这意味着我在GET或POST上没有出现CORS错误。我的请求都在服务器上收到,他们的回复都在客户端收到。
也就是说,除非在Web API中发生异常。然后,我得到了CORS错误,而不是获取异常细节。所以客户端看不到异常细节。
无法加载 http://localhost:64630/api/sql/familiesCollection/create:不 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许来源“http://localhost:4200” 访问。响应的HTTP状态代码为500。
这是我的Startup类中的Configure方法:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseCors(builder => builder
.AllowAnyHeader()
.AllowAnyOrigin()
.AllowAnyMethod());
app.UseMvc();
}
如果接受了CORS请求,并且接受了CORS响应,为什么在客户端也接受错误的情况下,异常细节不会被接收?
更新......我根据Marcus的建议实施了更详细的版本;但无济于事。在Web API中发生未处理的异常时,仅在尝试在500响应中返回错误数据的情况下仍然会得到完全相同的CORS错误。
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(o => o.AddPolicy("AllowAllPolicy", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
services.AddMvc();
services.AddOptions();
services.Configure<AppConfig>(Configuration.GetSection("AppConfig"));
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseCors("AllowAllPolicy");
app.UseMvc();
}
然后,在我的控制器类中:
[EnableCors("AllowAllPolicy")]
public class SqlApiController
{
:
这些都没有帮助。 CORS一直有效,直到Web API出现异常。然后,我得到了这个,而不是来自500的异常信息:
无法加载 http://localhost:64630/api/sql/familiesCollection/create:不 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许来源“http://localhost:4200” 访问。响应的HTTP状态代码为500。
答案 0 :(得分:0)
根据我的看法,您对CORS配置没有任何特定限制,并允许“全部”。在这种情况下,这可以帮助你。
我也看到你用[EnableCors ...]属性装饰你的控制器,所以在出错时它可能会从当前控制器中移出并且错误在“其他地方”被处理,这可能导致该属性超出范围...
我使用了更简单的方法,但允许CORS,错误也被“传输”到客户端。
using Microsoft.Owin.Cors;
namespace Test
{
public partial class Startup
{
public void ConfigureAuth(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
然后删除与CORS相关的所有其他内容,这足以支持全局启用的CORS并允许所有来源(即*)。