Ho cercato accuratamente ma non riesco a trovare una soluzione a questo problema nella mia circostanza particolare.CORS abilitato ma la risposta per il preflight ha un codice di stato HTTP 404 non valido quando POSTing JSON
Le chiamate di servizio tra domini tramite Fiddler (POST) vengono eseguite correttamente e i dati vengono ricevuti. Tuttavia, tramite il browser (Chrome) viene visualizzato il messaggio 'preflight ha codice di stato HTTP non valido 404'
Ho un'applicazione Web API e ho installato CORS e ho assicurato quanto segue nel file web.config:
<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>
Ecco la chiamata 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);
}
});
Ovviamente, funziona sullo stesso dominio perfettamente e, come detto, funziona utilizzando Fiddler.
Sono certo che è il preflight del browser OPZIONI controllare che non funzioni per il tipo di contenuto di 'application/json' ma non sono sicuro di come risolverlo.
C'è qualcosa che manca nel file web.config che dovrei aggiungere?
Ho provato a rimuovere "content-type" senza alcun effetto.
Avevo sperato this article avrebbe risolto il problema (sembrava promettente), ma si verifica lo stesso errore:
XMLHttpRequest cannot load [URL]. Response for preflight has invalid HTTP status code 404
funziona anche per me .. –
la prego di aiutarmi su questo: https://magento.stackexchange.com/questions/170342/ magento-htaccess-response-for-preflight-has-invalid-http-status-code-400 –
Grazie ha funzionato. È importante aggiungere anche i gestori. – Dileep