Получение ошибки CORS * только * при исключении сервера, вызывающего ASP.NET Core Web API из Angular 6 - PullRequest
0 голосов
/ 14 мая 2018

У меня есть CORS на месте и работает.Это означает, что я не получаю ошибок CORS на GET или POST.Все мои запросы принимаются на сервере, а их ответы - на клиенте.

То есть, ЕСЛИ не происходит исключение в Web API.Затем вместо получения сведений об исключении я получаю ошибку CORS.Таким образом, клиент не может видеть сведения об исключении.

Не удалось загрузить http://localhost:64630/api/sql/familiesCollection/create: Нет заголовка «Access-Control-Allow-Origin» в запрошенном ресурсе.Происхождение 'http://localhost:4200' поэтому не допускается.Ответ имеет HTTP-код состояния 500.

Вот метод Configure в моем классе запуска:

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

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

    app.UseMvc();
}

Если запрос CORS принят и ответ CORS принят обратно,почему сведения об исключениях в случае ошибки также не принимаются клиентом?

Обновление ... Я реализовал более подробную версию в соответствии с предложением Маркуса;но безрезультатно.По-прежнему возникает та же самая ошибка CORS только в одном случае попытки вернуть данные ошибки в ответе 500, когда в Web API возникает необработанное исключение.

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» на запрошенном ресурсе.Origin 'http://localhost:4200' поэтому не допускается.Ответ имеет HTTP-код состояния 500.

1 Ответ

0 голосов
/ 15 мая 2018

Из того, что я вижу, у вас нет особых ограничений в конфигурации CORS, и вы разрешаете "Все". В этом случае это может вам помочь.

Я также вижу, что вы украшаете свой контроллер с помощью атрибута [EnableCors ...], поэтому в случае ошибки он может выходить из текущего контроллера, а ошибка обрабатывается «в другом месте», что может привести к тому, что атрибут выйти за рамки ...

Я использовал более простой способ, но разрешает CORS, а ошибки также «передаются» клиенту.

using Microsoft.Owin.Cors;

namespace Test
{
    public partial class Startup
    {

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

Затем удалите все остальное, что связано с CORS, этого достаточно для глобально включенного CORS и допускает все источники (т. Е. *).

...