Я сохраняю токен в заголовке запроса с помощью ajax и отправляю его в Rest web api. Это мой запрос, отправленный на Web API:Невозможно прочитать значение заголовка запроса в остальном web api
var xhr = new XMLHttpRequest();
$.ajax({
url: 'http://localhost:32253/api/UserDetail/Authenticate',
headers: {
"Authorization-Token": res,
"X-HTTP-Method-Override": "GET"
},
type: 'GET',
async: false,
contentType: "application/json",
dataType: 'json',
success: function (data) {
alert("Success from success callback!");
// ShowData(data);
$('#RId').text(data.RoleId);
$('#RDesc').text(data.RoleDescription);
$('#RName').text(data.RoleName);
},
error: function (xhr, status) {
alert(status);
}
//complete: function (data) {
// alert("Success!from complete function");
// }
});
На стороне сервера (остальной Web API), я пытаюсь прочитать заголовок
if (Request.Headers.Contains("Authorization-Token"))
{
var token = Request.Headers.GetValues("Authorization-Token").First();
}
Но запрос не содержит заголовок " Авторизация-Токен». Я вижу имя заголовка в заголовках Access-Control-request-Headers. Я не знаю, как читать его ценность. Кто-нибудь может мне помочь. Я включил CORS слишком
UPDATE Теперь я передаю маркер, используя стандартный Authorization заголовок запроса объекта
$.ajax({
url: 'http://localhost:32253/api/UserDetail/Authenticate',
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization", "Basic " + res);
},
type: 'GET',
async: false,
contentType: "application/json",
dataType: 'json',
authorization: res,
success: function (data) {
alert("Success from success callback!");
// ShowData(data);
$('#RId').text(data.RoleId);
$('#RDesc').text(data.RoleDescription);
$('#RName').text(data.RoleName);
},
error: function (xhr, status) {
alert(status);
}
//complete: function (data) {
// alert("Success!from complete function");
// }
});
, но я не могу найти его в заголовки запросов. Смотрите изображение для более подробной информации Request header
ЗАПРОС LOG Это запрос, полученный на стороне сервера
OPTIONS /api/UserDetail/Authenticate HTTP/1.1
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en;q=0.5
Host: localhost:32253
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0
Access-Control-Request-Method: GET
Access-Control-Request-Headers: authorization-token,content-type
Origin: http://localhost:14576
Рад, что вы его нашли! Для этого вам понадобится пакет nuget: [Microsoft.AspNet.WebApi.Cors] (https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Cors/), то в вашем WebApiConfig вы просто добавляете это 'config.EnableCors (новый EnableCorsAttribute (" domain.com "," * "," * "));' Есть довольно хорошая статья от MS [здесь] (http://www.asp.net/web-api/ Обзор/безопасность/включения-кросс-Origin-запросы-в-веб-API). – ManOVision
Я сначала попытался с CORS, но это не помогло. Я включил CORS в webapiconfig и добавил enablecors на свой метод get. Но это не помогло. Наконец, я удалил CORS и попробовал вышеупомянутое решение, и он наконец-то сработал. Я не знаю, почему CORS не работал должным образом –