Добавить класс промежуточного программного обеспечения в проект для обработки ОПЦИИ глагол.
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 в методе Настройка.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseOptions();
}
Что такое конкретный сценарий, где это не удается? Если это «все время не работает для любого браузера Chrome/ff, делающего CORS», то как это не распространяется уже на фреймворк? Похоже, это было бы довольно огромным упущением. – ssmith
Согласен. Однако так оно и есть. Структура позволит вам делать CORS со встроенными функциями, но не обрабатывает вызовы OPTIONS, и это требование для нормального использования междоменных вызовов api из браузеров. Тем не менее, вы можете избежать этого, сделав более простой вызов, например, тип установки для текста/plain и несколько других вещей. Затем браузер сначала не будет выполнять вызов OPTIONS. –