JQuery POST запрос в TypeScript

8

Я пытаюсь поговорить с 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, довольно странно.

Изображение 30708

Неверный HTTP-глагол, а заголовки включены в заголовки Access-Control-Request не как стандартный заголовок.

JQuery 3.2.0 и самый последний index.d.ts из Определенно типизированный.

Я могу создать HTTP-запрос в Fiddler:

Изображение 30709

Запрос, который я пытаюсь создать:

Изображение 30710

Обновление

Я пробовал манипулировать dataType, чтобы обойти предполетные проверки:

contentType : "text/plain",
method: "POST",
type: "post",
dataType: "json",

Обновление 2

API размещен в IIS Express из Visual Studio 2017 (с использованием .NET Core), а веб-сайт размещается с помощью lite-server, Этот код отлично работает при выводе пользовательских заголовков.

  • 0
    Это просто дикая догадка, но согласно документации API jQury вы должны использовать method в пользу type предыдущие 1.9.
  • 0
    Спасибо, я изменил тип: на данные: но он все еще приходит как ОПЦИИ, а не как POST
Показать ещё 9 комментариев
Теги:

1 ответ

5

Это просто нормальный CORS, выполняющий свою работу. Убедитесь, что вы обслуживаете html-сайт, содержащий ваш script, с того же URL-адреса, где находится ваш API. например:.

ваш Html/ Script должен быть расположен под

http://localhost:1234/web/index.html

то AJAX-вызов

http://localhost:1234/api/Controller

не должно быть никаких проблем, так как script выдача запроса происходит из одного и того же URL/порта, и нет необходимости делать чек.

Таким образом, вы должны обойти необходимость предварительной проверки браузера, которая определяет, предоставлен ли запрос в соответствии с CORS.

В качестве альтернативы включить CORS в свой API, но убедитесь, что вы не открываете API для вызова из любого возможного (Web-) клиента там, чтобы предотвратить неправильное использование.

Еще один возможный путь, чтобы получить больше контроля над вашими URL-адресами, может быть переключиться на полный IIS даже на вашем DEV-машине, но могут быть другие/лучшие способы достижения этого (я не настолько глубоко вхожу в хостинг .NET Core ATM, чтобы обеспечить лучший образец, но другие могут)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню