【问题标题】:CORS header ‘Access-Control-Allow-Origin’ missing when .NET Core API catches an error.NET Core API 捕获错误时缺少 CORS 标头“Access-Control-Allow-Origin”
【发布时间】:2019-03-21 08:25:46
【问题描述】:

我有一个 .NET Core API,可以在多种情况下捕获错误。其中之一是调用没有返回数据。当没有数据返回时,会收到一个 200ok 错误消息,指出没有返回数据。

在我的 API 中,我在启动时配置了 CORS:

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

我已经在我的 MVC 之前注册了它:

services.AddCors();

services.AddMvc();

当后端 API 上的请求成功时,这很有效,但如果我发现错误......就像没有从服务器返回数据时,我会在控制台中收到这个:

Client Side Error:  Object { headers: {…}, status: 0, statusText: "Unknown Error", url: null, ok: false, name: "HttpErrorResponse", message: "Http failure response for (unknown url): 0 Unknown Error", error: error }

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:52706/api/peoplecategories. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).[Learn More]

通过我在 Angular 应用程序中执行的错误处理,我假设我应该接收到从我的 API 中的 catch 返回的错误响应,但是我得到了这个 CORS 错误和未知响应。

这是 Postman 中完全相同的调用,以及随后的响应:

【问题讨论】:

    标签: angular api asp.net-core cors


    【解决方案1】:

    您必须从后端返回有效的 JSON 响应。再次验证您的回复。

    【讨论】:

    • 这似乎是问题所在,很好。我正在使用错误处理中间件,如果我发现错误,它会以纯文本形式发送响应。我认为解决此错误的唯一方法是将错误消息字符串作为 JSON 对象返回,对吗?
    • 是的,如果API返回200或201码的响应,必须是JSON格式。注意:我说的是 Angular,默认情况下 Angular 期望 JSON 格式的成功消息。
    • 所以,我尝试返回一个带有 200ok 响应的 JSON 对象,但没有成功。我通过让我的中间件返回一个带有 JSON 对象和纯文本消息的 400badrequest 进行了一些额外的故障排除,这也产生了与以前相同的结果。我仍然看不到我返回的消息。
    猜你喜欢
    • 2018-03-28
    • 2019-02-07
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 2020-01-05
    相关资源
    最近更新 更多