Reactie voor preflight heeft ongeldige HTTP-statuscode 405 op Angular Js1 en Webapi 2

Fout:

OPTIONS http://localhost:8080//api/home/GetText 405 (Method Not Allowed)
http://localhost:8080//api/home/GetText. Response for preflight has invalid HTTP status code 405
angular.js:14362 Error: Error getting home/GetText data from the database! 
Headers:

Reactiekoppen:

Access-Control-Allow-Credentials:false
Access-Control-Allow-Headers:gid,Origin, X-Requested-With, Content-Type, Accept, Authorization
Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Origin:*
Allow:GET
Content-Length:76
Content-Type:application/json; charset=utf-8
Date:Fri, 28 Jul 2017 10:30:06 GMT
Server:Microsoft-IIS/10.0
X-Powered-By:ASP.NET

Verzoek headers:

Accept:*/*
Accept-Encoding:gzip, deflate, br
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:authorization,gid
Access-Control-Request-Method:GET
Cache-Control:no-cache
Connection:keep-alive
Host:localhost:8080
Origin:http://evil.com/
Pragma:no-cache
Referer:http://localhost:1852/
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36

Houd er rekening mee dat ik Angular Js als client en Webapi voor server-side gebruik. Ik voer een xhr-verzoek uit via $resource-service.


Antwoord 1, autoriteit 100%

Dit komt omdat uw back-end-API geen OPTIONS-verzoek voor uw routes ondersteunt (met name /api/home/GetTextdeze route). AngularJS controleert CORS-verzoeken doorgaans door OPTIONS-verzoeken uit te voeren voordat daadwerkelijke inhoudsverzoeken worden gedaan.

U moet ondersteuning voor OPTIONS-verzoeken inschakelen in uw back-end en van daaruit de juiste headers + goede HTTP-status (200-299) retourneren.


Antwoord 2, autoriteit 100%

protected void Application_BeginRequest(object sender, EventArgs e)
        {
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
            if (HttpContext.Current.Request.HttpMethod != "OPTIONS") return;
            HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache");
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT");
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "gid, filename, Origin, X - Requested - With, Content - Type, Accept, Authorization");
            HttpContext.Current.Response.AddHeader("Access-Control-Expose-Headers", "X-filename");
            HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
            HttpContext.Current.Response.End();
        }

Hiermee is het bovenstaande probleem opgelost.


Antwoord 3

het betekent dat je een methode probeert aan te roepen van FRONT END NAAR BACK END met de VERKEERDE HTTP-WERKWOORDEN (dus bijvoorbeeld PUT IN PLAATS van POST)

controleer het nogmaals

Other episodes