Если я попытаюсь отправить запрос на контроллер веб-API, я получу сообщение об ошибке в веб-браузере:
«В запрошенном ресурсе отсутствует заголовок« Access-Control-Allow-Origin ». Следовательно, исходный код« null »не имеет доступа. Ответ имеет HTTP-код состояния 500».
Вот мой запрос на пост jquery:
$.ajax({
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
type: "POST",
url: "http://localhost:12345/api/xs/" + selectedId,
data: JSON.stringify(anyObj),
dataType: "json"
});
и вот (web api) контроллер:
[Route("api/[controller]")]
public class XSController : Controller
{
[HttpPost("{id}")]
[EnableCors("AllowAll")]
//[DisableCors()]
public async Task<IActionResult> Post(ushort id, [FromBody]AnyObjVM model)
{
}
}
и файл startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("AllowAll",
builder =>
{
builder.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
;
});
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); }
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseCors("AllowAll");
app.UseMvc();
}
Заголовок запроса:
Accept: application/json
Accept-Encoding: gzip, deflate, br
Accept-Language: pl-PL,pl;q=0.9,en-US;q=0.8,en;q=0.7
Connection: keep-alive
Content-Length: 166
Content-Type: application/json
Host: localhost:12345
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36
Я попытался включить / отключить CORS в файле startup.cs и в методе контроллера.
WebAPI работает на моем локальном компьютере в IIS Express.
Сайт, который вызывает веб-API, также находится на моем локальном компьютере - я запускаю сайт вручную (нажмите на файл сайта), поэтому для origin задано значение null. Обычно я могу вызывать методы веб-API, иногда нет .
Я также попытался запустить Chrome с опцией --disable-web-security (опционально с --user-data-dir = "d: / temp_chrome"), но это ничего не изменило.
Как мне решить эту проблему?