Описание проблемы:
У меня есть два веб-проекта, которые размещены на разных доменах. При совершении ajax звонка в мой проект веб-API я получаю следующее:
Доступ к XMLHttpRequest в '' from origin '' был заблокирован политикой CORS: Ответ на предварительный запрос не проходит проверка контроля доступа: в запрашиваемом ресурсе отсутствует заголовок «Access-Control-Allow-Origin».
Первый проект - веб-API
Мой первый проект, который is ASP NET Web API (. Net Framework 4.8)
Я включил CORS для всех, только чтобы убедиться, что тесты проходят правильно.
В моем файле WebApiConfig
у меня есть следующая строка.
config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
С using System.Web.Http.Cors;
выше.
Мой метод не имеет ничего особенного, как атрибуты, так как мы включили CORS глобально.
[RoutePrefix("api/Test")]
public class TestController : ApiController
{
[Route("RequestConnection")]
[HttpPost]
public IHttpActionResult RequestConnection(MasterOnRequestInputModel inputModel)
{
...some code logic here...
}
}
Второй проект - JavaScript с AJAX запросом
Мои вторые проекты хотят вызвать упомянутый выше метод в Web API.
Мой ajax вызов выглядит следующим образом:
$.ajax({
type: "POST",
url: myUrl,
contentType: "application/json; charset=utf-8",
dataType: 'json',
data: {
'Body': body,
'Head': head,
'Width': width,
'Height': height
},
success: screencastControllerPostSuccess
});
В Chrome запрос выглядит следующим образом:
Что я делаю не так?
Редактировать:
Ответ
Если вы, ребята, сделали именно то, что написано выше, у вас не должно быть абсолютно никаких проблем с CORS.
Моя проблема была с WAF , который использует наша компания. WAF отклонил мой запрос из-за потенциальной атаки. И это потому, что я отправлял HTML элементов в теле запроса. Вместе с коллегами по системному администратору мы исправили проблему.
Итак, интересная часть заключается в том, что после того, как мой запрос отклонен от WAF, он возвращает ошибку, как будто проблема в CORS. Это потому, что запрос действительно междоменный, но ответ WAF generi c после отказа в запросе не имеет заголовка Access-Control-Allow-Origin
.