*仅*在从 Angular 6 调用 ASP.NET Core Web API 的服务器异常上获取 CORS 错误

2024-03-09

我已经安装了 CORS 并正在工作。这意味着我在 GET 或 POST 上没有收到 CORS 错误。我的请求都是在服务器上接收的,它们的响应都是在客户端上接收回来的。

也就是说,除非 Web API 中发生异常。然后,我没有得到异常详细信息,而是得到了 CORS 错误。所以客户端无法看到异常详细信息。

加载失败http://localhost:64630/api/sql/familiesCollection/create http://localhost:64630/api/sql/familiesCollection/create: 不 请求中存在“Access-Control-Allow-Origin”标头 资源。起源 'http://本地主机:4200 http://localhost:4200' 因此不允许 使用权。响应的 HTTP 状态代码为 500。

这是我的 Startup 类中的配置方法:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseCors(builder => builder
        .AllowAnyHeader()
        .AllowAnyOrigin()
        .AllowAnyMethod());

    app.UseMvc();
}

如果 CORS 请求被接受,并且 CORS 响应也被接受,为什么客户端不接受发生错误时的异常详细信息?

更新...我根据马库斯的建议实现了一个更详细的版本;但无济于事。当 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 http://localhost:64630/api/sql/familiesCollection/create: 不 请求中存在“Access-Control-Allow-Origin”标头 资源。起源 'http://本地主机:4200 http://localhost:4200' 因此不允许 使用权。响应的 HTTP 状态代码为 500。


据我所知,您对 CORS 配置没有任何具体限制,并且允许“全部”。在这种情况下,这可以帮助你。

我还看到您使用 [EnableCors...] 属性装饰控制器,因此出现错误时,它可能会脱离当前控制器,并且错误会在“其他地方”处理,这可能会导致属性超出范围范围...

我使用了一种更简单的方法,但允许 CORS 并且错误也会“传输”到客户端。

using Microsoft.Owin.Cors;

namespace Test
{
    public partial class Startup
    {

        public void ConfigureAuth(IAppBuilder app)
        {
            app.UseCors(CorsOptions.AllowAll);

然后删除与 CORS 相关的所有其他内容,这对于全局启用的 CORS 来说足够了,并且允许所有来源(即 *)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

*仅*在从 Angular 6 调用 ASP.NET Core Web API 的服务器异常上获取 CORS 错误 的相关文章

随机推荐