Ответ на предполетный запрос не проходит проверку контроля доступа: на запрашиваемом ресурсе отсутствует заголовок " Access-Control-Allow-Origin



У меня есть контроллер CORS Web API, как показано ниже



[EnableCors(origins: "*", headers: "*", methods: "*")]
public class AddNewLocationController : ApiController
{
public String Post(String param1, String param2)
{
return "Param1: " + param1 + ", Param2: " + param2;
}
}


Я хочу передать данные этому контроллеру с помощью Ajax. Команда выполняется успешно, когда я добавляю параметры в url:



        $.ajax({
url: 'http://localhost:21626/api/AddNewLocation?param1=test1&param2=chriwil'**,
dataType: "json",
type: "POST",
contentType: 'application/json; charset=utf-8',
async: true,
processData: false,
cache: false,
success: function (data) {
console.log(data);
},
error: function (xhr) {
console.log(xhr);
}
});


Когда я пытаюсь передать данные, используя свойство data вызова ajax, я получаю ошибку " ответ на предполетный запрос не проходит проверку контроля доступа: нет заголовка 'Access-Control-Allow-Origin' на запрошенном ресурсе".



        $.ajax({
url: 'http://localhost:21626/api/AddNewLocation',
dataType: "json",
type: "POST",
data: {param1: "param1", param2: "param2chriwil"},
contentType: 'application/json; charset=utf-8',
async: true,
processData: false,
cache: false,
success: function (data) {
console.log(data);
},
error: function (xhr) {
console.log(xhr);
}
});
719   2  

2 ответов:

Вы не сериализуете данные. Второй вызов должен быть

data: JSON.stringify({param1: "param1", param2: "param2chriwil"}),

См.: jQuery ajax, как отправить JSON вместо QueryString

EDIT

Кроме того, если вы укажете сигнатуру метода, например Post(String param1, String param2), движок будет думать, что param1 и param2 будут приходить через строку запроса - поэтому неудивительно, что ваш второй вызов завершается неудачей (вы не указали param1 и param2 в url); если вы хотите отправить параметр через json, используйте эту сигнатуру вместо этого:

public class Model
{
    public string param1 { get; set; }
    public string param2 { get; set; }
}

public String Post(Model model)
{
    return "Param1: " + model.param1 + ", Param2: " + Model.param2;
}    

Добавление заголовка Access-Control-Allow-Origin к ответу перед полетом в global.asax.cs сработало для меня. Пожалуйста, обратитесь https://stackoverflow.com/a/46046766/2847061

Comments

    Ничего не найдено.