elshorbagy Ответов: 1

Отправить пользовательский заголовок с помощью jquery не работает


Я хочу отправить пользовательское значение в заголовке запроса с помощью Jquery в мой веб-API. Когда я читаю заголовок запроса в веб-API, он выглядит следующим образом:

Connection\r\nAccept\r\nAccept-Encoding\r\nAccept-Language\r\nHost\r\nUser-Agent\r\nAccess-Control-Request-Method\r\nOrigin\r\nAccess-Control-Request-Headers\r\n

Я не могу найти значение mykey с заголовком при вызове веб-API из Google Chrome. Когда я использую fiddle для вызова веб-API, я получаю пользовательский ключ. . Я прочитал заголовок в The Gobal.aspx

Что я уже пробовал:

<скрипт>
$.Аякс({
тип: "Почта",
кроссдомен: правда,
URL-адрес: 'http://localhost:61190/webapi',
тип данных: 'json',
кэш: false,
заголовки: {
'системы MyKey':'значение',
'Content-Type':'application/json'
}
});
</script>

Мой веб-API

охраняемых недействительными Application_PostAuthorizeRequest()
{
строковые ключи = "";
for (int i = 0; i < HttpContext.Current.Запрос.Заголовки.Граф; i++)
{
ключи += HttpContext.Current.Запрос.Заголовки.Ключи[i].ToString() + Environment.NewLine;
}
выбросить новое исключение(ключи);
}

1 Ответов

Рейтинг:
11

Richard Deeming

Кросс-доменные AJAX-запросы являются более сложными, что:
Аякс крест домена | Кросс-происхождения запросу | jQuery и коров[^]

Компонент XHR первоначально сделает "предполетный" запрос к серверу, без каких-либо данных или пользовательских заголовков, чтобы гарантировать, что настройки CORS на сервере позволят выполнить этот запрос.

Ваш сервер безоговорочно выдает исключение для каждого запроса, поэтому предполетный запрос не выполняется, и реальный запрос никогда не отправляется.

Попробуйте изменить свой код, чтобы проверить это HttpContent.Current.Request.HttpMethod имеет значение "пост" прежде чем искать свой собственный заголовок.

Вам также нужно будет убедиться, что вы отправляете правильные заголовки CORS в ответе.
Включение запросов перекрестного происхождения в ASP.NET Web API 2 | Microsoft Docs[^]


elshorbagy

Но когда я использую fiddle, веб-API может правильно получить пользовательский заголовок.

Richard Deeming

Потому что Fiddler-это настольное приложение, и на него не распространяются те же ограничения CORS, что и на веб-страницу.

elshorbagy

Я отключил метод исключения throw и добавил Эти строки в свой webconefig, но ничего не изменилось
<httpProtocol>
<customHeaders>
&ЛТ;добавить имя="контроля доступа-разрешить-происхождения" значение="*" /&ГТ;
&ЛТ;добавить имя="доступ-контроля-разрешить-заголовки" значение="происхождения, то x-просил-с,х-мои-собственные-заголовок,JTV, то контент-тип, принять, разрешение" /&ГТ;
&ЛТ;добавить имя="контроля доступа-разрешить-методы" значение="*" /&ГТ;
</customHeaders>
</httpProtocol>