Ax ios почтовый запрос не выполнен из-за CORS, но тот же запрос, использующий ajax, не вызывает проблем - PullRequest
0 голосов
/ 06 февраля 2020

Я получаю следующую ошибку, когда делаю топор ios после запроса. Но когда я использую запрос ajax, проблема не возникает:

запрос был заблокирован политикой CORS: Ответ на предпечатный запрос не проходит проверку контроля доступа: Нет заголовка «Access-Control-Allow-Origin» присутствует на запрошенном ресурсе.

Ajax Запрос:

Топор ios Запрос:

let payload = {
    type: ["a", "b"],
    category: ["a", "b"],
    category: ["a", "b"],
    accountNumber: "123"

};
var apiURL = this.$apiBaseURL + "/Product/ProductDetails";
$.ajax({
    url: apiURL,
    type: "POST",
    data: { payload },
    xhrFields: {
        withCredentials: true
    },
    success: function (result) {
        console.log(JSON.stringify(result));
    }
});
this.$http.post(apiURL,payload,{withCredentials: true})

** ОБНОВЛЕНИЕ 1 **

Я все еще сталкиваюсь с той же проблемой. Здесь я поделюсь заголовком запроса в ajax и топор ios запрос

AJAX Рабочий код и заголовок запроса :

{
 var apiURL = this.$apiBaseURL + "/Request/MediaUpload";
$.ajax({
method: 'post',
processData: false,
contentType: false,
cache: false,
data: fileformData,
enctype: 'multipart/form-data',
url: apiURL,
      xhrFields: {
        withCredentials: true
      }
    });
}

Заголовок запроса :

Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Connection: keep-alive
Content-Length: 7610
Content-Type: multipart/form-data; boundary=---- 
WebKitFormBoundaryAjc8HwVPaRtQ5Iby
Host: localhost:62148
Origin: http://localhost:8989
Referer: http://localhost:8989/
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36

AX IOS неверный код и заголовок

var apiURL = this.$apiBaseURL + "/Request/MediaUpload";
var self=this; 
let config={
  headers:{
   'Content-Type': 'multipart/form-data'
  }
}
this.$http.post(apiURL, { withCredentials: true },fileformData,
         config)

Заголовки запроса:

        Provisional headers are shown
        Accept: application/json, text/plain, */*
        Content-Type: application/json;charset=UTF-8
        Referer: http://localhost:8989/
        User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36

Вот мой конфиг веб-API, где я включил cors

string origin = "http://localhost:8989";

        EnableCorsAttribute cors = new EnableCorsAttribute(origin, "*", "*", "*");
        cors.SupportsCredentials = true;
        config.EnableCors(cors);
        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

** ОБНОВЛЕНИЕ 2 **

Конфигурация CORS на стороне сервера выполнена правильно, поэтому я могу успешно выполнить вызов с помощью AJAX. Это известная проблема AX IOS, возникающая только при включении аутентификации windows?

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Добавьте это в ваш web.config файл:

<system.webServer>
  <handlers>
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <remove name="OPTIONSVerbHandler" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>
</system.webServer>

При использовании значения по умолчанию ajax не будет отправлять запросы OPTIONS, а при использовании ax ios. Это позволит принимать запросы OPTIONS.

0 голосов
/ 06 февраля 2020

Эта проблема возникает из-за того, что jQuery отправляет запрос как application/x-www-form-urlencoded по умолчанию и не отправляет запрос предварительной проверки, тогда как ax ios отправляет как application/json и отправляет запрос предварительной проверки, т.е. OPTIONS, перед отправкой фактического запроса.

Один из способов это сделать - установить для заголовка Content-type значение 'Content-Type': 'application/x-www-form-urlencoded' по оси ios.

Чтобы обойти эту проблему, вам придется изменить настройки на стороне сервера.

...