Я пытаюсь поговорить с API с помощью TypeScript и JQuery (от определенного типа).
let ajaxsettings: JQueryAjaxSettings = {
url: this.url,
contentType: "application/json",
type: "POST",
data: JSON.stringify(this.apiRequest),
processData: false,
success: ( data, textStatus, jQxhr ) => {
console.log("Response:" + JSON.stringify(data));
},
error: ( jqXhr, textStatus, errorThrown ) => {
console.log("Error Response; " + JSON.stringify(jqXhr));
},
headers: {
"X-UserName": "blahblah",
"X-Password": "blahblah"
},
beforeSend: (request) => {
request.setRequestHeader("X-APIKey", "blahblahblah");
}
};
$.ajax(ajaxsettings);
Выполнение запроса и просмотр того, что захватывает Fiddler, довольно странно.
Неверный HTTP-глагол, а заголовки включены в заголовки Access-Control-Request не как стандартный заголовок.
JQuery 3.2.0 и самый последний index.d.ts из Определенно типизированный.
Я могу создать HTTP-запрос в Fiddler:
Запрос, который я пытаюсь создать:
Обновление
Я пробовал манипулировать dataType, чтобы обойти предполетные проверки:
contentType : "text/plain",
method: "POST",
type: "post",
dataType: "json",
Обновление 2
API размещен в IIS Express из Visual Studio 2017 (с использованием .NET Core), а веб-сайт размещается с помощью lite-server, Этот код отлично работает при выводе пользовательских заголовков.
Это просто нормальный CORS, выполняющий свою работу. Убедитесь, что вы обслуживаете html-сайт, содержащий ваш script, с того же URL-адреса, где находится ваш API. например:.
ваш Html/ Script должен быть расположен под
то AJAX-вызов
не должно быть никаких проблем, так как script выдача запроса происходит из одного и того же URL/порта, и нет необходимости делать чек.
Таким образом, вы должны обойти необходимость предварительной проверки браузера, которая определяет, предоставлен ли запрос в соответствии с CORS.
В качестве альтернативы включить CORS в свой API, но убедитесь, что вы не открываете API для вызова из любого возможного (Web-) клиента там, чтобы предотвратить неправильное использование.
Еще один возможный путь, чтобы получить больше контроля над вашими URL-адресами, может быть переключиться на полный IIS даже на вашем DEV-машине, но могут быть другие/лучшие способы достижения этого (я не настолько глубоко вхожу в хостинг .NET Core ATM, чтобы обеспечить лучший образец, но другие могут)
method
в пользуtype
предыдущие 1.9.