Мне нужно добавить поддержку CORS в. NET core 3.1 API (было 2.2, но я решил обновить в то же время). Я думал, что это будет легко. Документация здесь: https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-3.1 выглядит довольно просто. Я хочу поддерживать одну и ту же политику CORS на всех конечных точках. Итак, я решил оставить свои контроллеры в покое и просто внести изменения в startup.cs. Чего мне не хватает?
У меня есть конечная точка POST, но запросы OPTIONS возвращают ошибку 405. Я думал, что промежуточное программное обеспечение CORS должно было обрабатывать запрос, так что мне вообще не нужно думать о CORS внутри контроллеров.
Startup.cs
namespace MyAPI
{
public class Startup
{
readonly String ALLOW_ALL = "AllowAll";
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// services.Configure<IISOptions>(options =>
// {
// options.AutomaticAuthentication = true;
// });
services.AddLogging();
services.AddCors(options =>
{
options.AddDefaultPolicy(builder =>
{
builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
// .AllowCredentials();
});
});
services.AddMvc(MvcOptions => MvcOptions.EnableEndpointRouting = false);
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseRouting();
// if (env.IsDevelopment())
// {
// app.UseDeveloperExceptionPage();
app.UseCors();
// }
app.UseEndpoints(endpoints => endpoints.MapControllers());
app.UseMvc();
}
}
}
MyController.cs
namespace MyProj.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class FacilitiesController : ControllerBase
{
public FacilitiesController()
{
}
[HttpPost]
public JsonResult FloorPlanURL([FromBody] UniqueFloor theFloor)
{
<stuff happens>
return new JsonResult(new {success = true, url = out});
}
Я прошел несколько итераций, и здесь тоже смотрю: https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-3.1#enable -cors-with-endpoint-routing . Я, наверное, скучаю по чему-то маленькому и простому. Я мог бы добавить ручные обработчики OPTIONS во все контроллеры, но это выглядит довольно паршивым решением.