Включить заголовок параметров для CORS on.NET основной веб-API
Я решил эту проблему после того, как не нашел решение на Stackoverflow, поэтому я делюсь своей проблемой здесь и решением в ответе.
После включения кросс-доменной политики в моем приложении .NET Core Web Api с помощью AddCors она по-прежнему не работает из браузеров. Это происходит потому, что браузеры, в том числе Chrome и Firefox, сначала отправляют запрос опций, и мое приложение просто отвечает 204 нет контента.
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(); }