J'ai un projet ASP.NET MVC 5 et l'une des pages contient du JavaScript qui appelle une API sur un serveur qui exécute un projet ASP.NET WebApi. Les deux projets fonctionnent normalement sur des domaines différents, mais localement, ils se trouvent sur des ports différents sur localhost
. Ce JavaScript fait une demande GET
, mais quand je regarde le journal de réseau une demande OPTIONS
est faite à la place, et le WebApi renvoie 405 Method Not Authorized
.Pourquoi cette requête AJAX sur mon site ASP.NET MVC déclenche-t-elle un contrôle en amont?
D'après mes recherches, je sais que this is a "preflight" check that is sometimes triggered for AJAX calls, et je sais que ASP.NET WebApi doesn't support OPTIONS
by default, c'est pourquoi je reçois la 405. Cependant, the preflight check is supposed to be skipped when certain conditions are met, et ces conditions sont réunies ici. Voir par vous-même; ce qui suit est le (anonymisées) intégralité du code JS pour la requête AJAX:
var xmlhttp = new XMLHttpRequest();
var url = "http://localhost:12345/api/SomeAction?someArg=" + someArg;
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
// [snip], process the result here
}
};
xmlhttp.open("GET", url, true);
xmlhttp.send();
Pourquoi cette simple demande le déclenchement d'une vérification préalable?
vous devriez également signaler cela comme un problème sur l'AI javascript sdk https://github.com/Microsoft/ApplicationInsights-JS/issues. Je ne sais pas pourquoi la présence de l'IA forcerait un contrôle CORS par le navigateur. –
@JohnGardner: Je n'avais pas posté de problème là-bas parce que je ne pensais pas que c'était forcément un bug, juste un effet secondaire regrettable. Je crois que ce sont les en-têtes personnalisés que AI ajoute qui forcent le contrôle en amont (voir le fichier sur GitHub auquel je suis lié dans ma réponse). Faites-moi savoir si vous pensez que c'est un bug, et je peux ouvrir un problème. –