ASP Net Core CORS ошибка во время запроса - PullRequest
0 голосов
/ 04 октября 2018

В настоящее время я разрабатываю ASP Net Core API, и при попытке отправить запрос PUT для сервера я получаю ошибку возврата:

Ответ на запрос предполетной проверки не 't пройти проверку контроля доступа: в запрашиваемом ресурсе отсутствует заголовок «Access-Control-Allow-Origin»

Я уже готов установить app.EnableCors () и services.EnableCors (), но даже после этого я получаю сообщение об ошибке.

Вот код:

public class CorsMiddleware
{
    private readonly RequestDelegate _next;

    public CorsMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        context.Response.Headers.Add("Access-Control-Allow-Origin", "*");
        context.Response.Headers.Add("Access-Control-Allow-Credentials", "true");
        context.Response.Headers.Add("Access-Control-Allow-Headers", "Content-Type, X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Accept-Encoding, Content-Length, Content-MD5, Date, X-Api-Version, X-File-Name");
        context.Response.Headers.Add("Access-Control-Allow-Methods", "POST,GET,PUT,PATCH,DELETE,OPTIONS");
        if (context.Request.Method == "OPTIONS")
        {
            context.Response.StatusCode = (int)HttpStatusCode.OK;
            await context.Response.WriteAsync(string.Empty);
        }

        await _next(context);
    }
}

// Extension method used to add the middleware to the HTTP request pipeline.
public static class CorsMiddlewareExtensions
{
    public static IApplicationBuilder UseCorsMiddleware(this IApplicationBuilder builder)
    {
        return builder.UseMiddleware<CorsMiddleware>();
    }
}

И файл Startup.cs выглядит так:

public void ConfigureServices(IServiceCollection services)
{
     services.AddCors();
     services.AddMvc(ConfigureMvcOptions);
     services.AddSwaggerGen(ConfigureSwaggerOptions);
}

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

        // Enable middleware to serve generated Swagger as a JSON endpoint.
        app.UseSwagger();

        app.UseMiddleware(typeof(CorsMiddleware));
        app.UseAuthentication();
        app.UseMvc();
 }

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Перейти к вашему Startup.cs файлу

В методе ConfigureServices добавить;

services.AddCors(options =>
{
    options.AddPolicy("AllowLocalhost",
    builder => builder
    .AllowAnyOrigin()
    .AllowAnyHeader()
    .AllowAnyMethod()
    .AllowCredentials()
    .SetPreflightMaxAge(TimeSpan.FromDays(5)));
});

Затем в методе Configure добавить;

app.UseCors("AllowLocalhost");
0 голосов
/ 04 октября 2018

Я столкнулся с этой проблемой 2 дня назад.Мое решение состояло в том, чтобы замкнуть трубопровод, когда это запрос опций.Я не знаю, что происходит в другом промежуточном программном обеспечении, но что-то еще меняет код состояния после того, как вы его установили.И действительно, для запроса предварительной проверки параметров вам, вероятно, больше ничего не нужно выполнять.

Измените это:

    if (context.Request.Method == "OPTIONS")
    {
        context.Response.StatusCode = (int)HttpStatusCode.OK;
        await context.Response.WriteAsync(string.Empty);
    }

    await _next(context);

на следующее:

    if (context.Request.Method == "OPTIONS")
    {
        context.Response.StatusCode = (int)HttpStatusCode.OK;
        await context.Response.WriteAsync(string.Empty);
    }
    else
    {
        await _next(context);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...