J'ai une API Web ASP.NET hébergée sur Azure. J'ai intégré le gestionnaire de messages HTTP à cette API. Le gestionnaire de messages est frappé quand je le frappe en utilisant l'appel AJAX. J'envoie également un en-tête de demande dans mon appel AJAX. Le problème est que je ne reçois pas l'en-tête envoyé à partir de l'appel AJAX à Message Handler intégré dans l'API Web. Reportez-vous l'image: Debugger screenshotImpossible d'obtenir des en-têtes à partir de la requête jQuery AJAX dans l'API Web ASP.NET
Ci-dessous le code de ma requête AJAX:
$.ajax({
url: "https://someservicename.azurewebsites.net/Service/RequestHandler",
beforeSend: function (xhr) {
xhr.setRequestHeader('Token', '86810e135958961ad4880ad');
},
type: "POST",
crossDomain: true,
data: {
param: "Passed Parameter"
},
success: function (msg) {
console.log(msg);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log(textStatus);
}
});
Le gestionnaire de messages dans l'API Web ressemble ci-dessous:
protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
string authToken;
try
{
authToken = request.Headers.GetValues("Token").FirstOrDefault();
if (authToken != "86810e135958961ad4880ad")
{
return await Task.Factory.StartNew(() =>
{
return new HttpResponseMessage(HttpStatusCode.BadRequest)
{
Content = new StringContent("Unauthorized access!")
};
});
}
else
{
return await base.SendAsync(request, cancellationToken);
}
}
catch (System.InvalidOperationException)
{
return null;
}
}
Quand je lance le code de mon IIS localhost la demande qui est envoyée est quelque chose comme ci-dessous:
Accept:*/*
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:token
Access-Control-Request-Method:POST
Connection:keep-alive
Host:someservicename.azurewebsites.net
Origin:http://localhost:12522
Referer:http://localhost:12522/pocppd.html
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36
Et le respon se que j'obtenir dans la console est:
https://someservicename.azurewebsites.net/Service/RequestHandler. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:12522' is therefore not allowed access. The response had HTTP status code 500.
Avec le client PostMan la demande fonctionne très bien, mais de localhost il renvoie une erreur. S'il vous plaît laissez-moi savoir la raison pour ne pas obtenir l'en-tête dans mon gestionnaire de message?
Réponse sur la console -qui sera apporte des dizaines de [résultats] (https://www.google.com.tr/search?q=Response+to+preflight+request+doesn % 27t + pass + access + contrôle + contrôle% 3A + No +% 27Access-Control-Autoriser-Origin% 27 & oq = Réponse + à + preflight + requête + doesn% 27t + pass + access + contrôle + check% 3A + No +% 27Access -Control-Autoriser-Origine% 27 & aqs = chrome..69i57j69i59.119j0j7 & sourceid = chrome & ie = UTF-8) lors de la recherche- vous indique simplement que l'origine de quelle requête provient n'est pas autorisée sur le serveur comme à cause de la norme CORS. La réponse de Marius est un moyen de rendre la réponse du serveur aux demandes de votre 'localhost'. – ibubi