Включить заголовок параметров для CORS on.NET основной веб-API


Я решил эту проблему после того, как не нашел решение на Stackoverflow, поэтому я делюсь своей проблемой здесь и решением в ответе.

После включения кросс-доменной политики в моем приложении .NET Core Web Api с помощью AddCors она по-прежнему не работает из браузеров. Это происходит потому, что браузеры, в том числе Chrome и Firefox, сначала отправляют запрос опций, и мое приложение просто отвечает 204 нет контента.

2 7

2 ответа:

Я знаю, что на него был дан ответ. Просто отвечаю с обновленной информацией. Так что это поможет другим.

Теперь его встроили в asp.net основная структура.

Просто следуйте https://docs.microsoft.com/en-us/aspnet/core/security/cors

И заменить

    app.UseCors(builder =>
   builder.WithOrigins("http://example.com"));

С

        app.UseCors(builder =>
       builder.WithOrigins("http://example.com")
              .AllowAnyHeader()
              .AllowAnyMethod()
              .AllowCredentials());

Добавьте в проект класс промежуточного ПО для обработки глаголаOPTIONS .

using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Hosting;

namespace Web.Middlewares
{
    public class OptionsMiddleware
    {
        private readonly RequestDelegate _next;
        private IHostingEnvironment _environment;

        public OptionsMiddleware(RequestDelegate next, IHostingEnvironment environment)
        {
            _next = next;
            _environment = environment;
        }

        public async Task Invoke(HttpContext context)
        {
            this.BeginInvoke(context);
            await this._next.Invoke(context);
        }

        private async void BeginInvoke(HttpContext context)
        {
            if (context.Request.Method == "OPTIONS")
            {
                context.Response.Headers.Add("Access-Control-Allow-Origin", new[] { (string)context.Request.Headers["Origin"] });
                context.Response.Headers.Add("Access-Control-Allow-Headers", new[] { "Origin, X-Requested-With, Content-Type, Accept" });
                context.Response.Headers.Add("Access-Control-Allow-Methods", new[] { "GET, POST, PUT, DELETE, OPTIONS" });
                context.Response.Headers.Add("Access-Control-Allow-Credentials", new[] { "true" });
                context.Response.StatusCode = 200;
                await context.Response.WriteAsync("OK");
            }
        }
    }

    public static class OptionsMiddlewareExtensions
    {
        public static IApplicationBuilder UseOptions(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<OptionsMiddleware>();
        }
    }
}

Затем добавьте app.UseOptions(); это в качестве первой строки в Startup.cs в методе Configure.

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseOptions();
}