Я использую. NET Core 2.1. Я настроил Startup.cs следующим образом:
public class Startup
{
public static IConfiguration Configuration { get; private set; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseCors(builder => builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
}
}
Веб-API развернут на linux машине. Методы GET
и POST
работают нормально. Когда я пытаюсь вызвать PUT
или DELETE
, это сообщение генерируется в консоли Chroome
.
Access to XMLHttpRequest at 'http://IP' from origin 'http://IP' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Изначально Kestrel включался в список 50001
, поскольку присутствовал сертификат SSL. Я настроил Kestrel в appsettings.json
для прослушивания только на 5000
. Так что теперь его единственный список 5000
.
appsettings. json
{
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://localhost:5000"
}
}
}
}
Я попробовал почти все ответы, приведенные в этой теме Как включить CORS в ASP. net Core WebAPI
Ни один из них не работал в моем случае.
Origin
- мой локальный хост, а веб-API работает на Live IP.
РЕДАКТИРОВАТЬ 1
Preflight (OPTIONS) Заголовки ответа
HTTP/1.1 204 No Content
Server: nginx/1.14.0 (Ubuntu)
Date: Sat, 25 Apr 2020 18:50:50 GMT
Connection: keep-alive
Access-Control-Allow-Headers: authtoken,authuser,content-type
Access-Control-Allow-Methods: PUT
Access-Control-Allow-Origin: *
Предпечатная проверка (ОПЦИИ) Заголовки запроса
OPTIONS /Foo/Controller HTTP/1.1
Host: MY LINUX Machine Live IP
Connection: keep-alive
Access-Control-Request-Method: PUT
Origin: http://localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36
Access-Control-Request-Headers: authtoken,authuser,content-type
Accept: */*
Referer: http://localhost:8080/xyz
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Фактический запрос (Заголовки запроса)
PUT /Foo/Controller HTTP/1.1
Host: Linux IP
Connection: keep-alive
Content-Length: 63
Accept: application/json, text/javascript, */*; q=0.01
Origin: http://localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36
Content-Type: application/json
Referer: http://localhost:8080/xyz
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Фактический запрос (заголовки ответа)
HTTP/1.1 500 Internal Server Error
Content-Type: text/html
Content-Length: 225
Connection: Close