La SCRO activé mais la réponse pour le contrôle en amont est non valide code d'état HTTP 404 lors de la Publication JSON
J'ai cherché à fond mais ne peut pas trouver une solution à ce problème dans mon cas particulier.
De la croix-domaine des appels de service à l'aide de Fiddler (POST) exécuter correctement et la réception des données. Cependant, par le biais du navigateur (Chrome), j'obtiens le message de contrôle est non valide code d'état HTTP 404'
J'ai une Web application de l'API et avez installé la SCRO et a assuré des conditions suivantes est présente dans le site web.fichier de configuration:
<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
</system.webServer>
Voici l'appel Ajax:
var secretKey = 'difusod7899sdfiertwe08wepifdfsodifyosey',
url = 'http://api.intrinsic.co.uk/api/v1/PTS/ActiveDrivers?api_key=098werolllfWnCbPGAuIXVOJidDHRfYcgxImMlxTXopuekXrSOqOWzEAIdeNTWGPQPpyHxgVGsFysGFKPzq';
jQuery.ajax ({
url: url,
type: "POST",
data: JSON.stringify({ secretKey: secretKey}),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function(data){
var content = "<table class=\"container\"><thead><tr><th>Driver Number</th><th>Timestamp</th><th>VRN</th><th>Latitude</th><th>Longitude</th><th>Track Link</th></tr></thead><tbody>";
$.each(data.ActiveDrivers.DriverLocationStatus, function (index, element) {
content += "<tr><td>" + element.DriverNumber + "</td>";
content += "<td>" + dateFormat(element.Timestamp, "d/m/yy") + " " + dateFormat(element.Timestamp, "h:MM TT") + "</td>";
content += "<td>" + element.VRN + "</td>";
content += "<td>" + element.CurrentLatitude + "</td>";
content += "<td>" + element.CurrentLongitude + "</td>";
content += "<td><a href=\"https://www.google.co.uk/maps/place//@" + element.CurrentLatitude + "," + element.CurrentLongitude + ",15z/\" target='_blank'>Track »</a></td></tr>";
});
content += "</tbody></table>";
$( "#result" ).html( content );
}
});
Évidemment, fonctionne sur le même domaine parfaitement et, comme mentionné, il fonctionne à l'aide de Fiddler.
Je suis certain qu'il est le navigateur OPTIONS de contrôle en amont de vérifier qui est un échec pour le contenu de type "application/json", mais je ne suis pas sûr de savoir comment le résoudre.
Est qu'il manque quelque chose dans le web.fichier de configuration que je dois ajouter?
J'ai essayé de l'enlever "content-type" avec aucun effet.
J'avais espéré cet article permettrait de résoudre le problème (s'il semblait prometteur), mais la même erreur s'est produite:
XMLHttpRequest cannot load [URL]. Response for preflight has invalid HTTP status code 404
Vous devez vous connecter pour publier un commentaire.
Grâce, mais l'obtention d'erreur 405,après les modifications de configuration.
Enfin, il travaille après l'ajout du code ci-dessous dans l'api web Mondial.asax fichier
J'ai finalement obtenu ce travail.
Cet article ' WebAPI avec la SCRO – IIS Intercepte les OPTIONS Verbe éclairé ma pensée. Une image a montré où, dans IIS, les OPTIONS de mappage de gestionnaire est apparu et pourquoi, au sein du web.config nous avons besoin de l'enlever pour assurer IIS n'a pas intercepter.
Quand j'ai pris un coup d'oeil au gestionnaire IIS qui n'ÉTAIT PAS là. J'ai ensuite pris un coup d'oeil à l'article lié 'Ne peut pas définir de HttpHandler commande en utilisant le Web.Config à moins qu'un «clair» tag existe' et vu que, dans cet article, après la suppression de l'OPTION de gestionnaire, il a ensuite ajouté explicitement dans le web.config.
Que je ne pouvais pas voir l'OPTION gestionnaire des services IIS, j'ai aussi ajouté sur le web.le fichier de configuration et tout d'un coup a fonctionné. Il est apparu que cet ajout est ce qui était nécessaire.
La finale du web.gestionnaires de configuration de la section se présente comme suit (notez que j'ai décidé de garder les initiales "supprimer" juste au cas où cela a causé des problèmes si j'ai migré vers un autre serveur web dans le futur).
Cela a fonctionné pour moi.
Mondiale.asax
Dans Le Web.config
reconstruire et hop.
J'en ai un similaire de la configuration de la montre des erreurs 404 et 500 erreurs que j'ai été de tenter d'obtenir de la SCRO en cours d'exécution sur mon web service. Mon fix essentiellement utilisé de Hussain solution, mais comme je l'ai nettoyé ma correction, j'ai constaté qu'une seule ligne de Réponse est nécessaire, et j'ai été capable de garder le site web d'origine des gestionnaires dans le web.config, et n'a PAS besoin de déplacer tous les gestionnaires de réponse dans le code.
Fondamentalement, ma correction inclut cette UNE CORRECTION MAJEURE dans mon ApplicationOnBeginRequest gestionnaire:
et ces gestionnaires dans mon web.config:
Désolé je ne pouvais pas envoyer cette note comme un commentaire de Hussain réponse.
Asp core utiliser ce code de Démarrage.cs dans Configurer la procédure. J'ai utilisé pour la version 2.0, mais je pense que cela devrait fonctionner avec les anciens trop
Cela m'a aidé aussi, j'ai eu de la SCRO configuré dans le web.config déjà