Die angeforderte Ressource unterstützt die HTTP-Methode 'OPTIONS' nicht.

7

Ich mache folgende Anfrage an eine Asp.net Web API PUT Methode von meinem angular.js Client:

%Vor%

Allerdings bekommst du die folgenden errormsg (in fiddler):

%Vor%

Dies ist ein Teil meiner asp.net web api web.config Datei:

%Vor%

Datencontroller Web-API:

%Vor%

Das ist meine Frage: Warum bekomme ich das errormsg (siehe oben) wenn ich genau dieselbe Anfrage in fiddler (funktioniert) mache wie im angleclient (funktioniert nicht) ??

    
user603007 22.06.2014, 15:05
quelle

6 Antworten

18

Ich weiß, dass dies eine alte Frage ist, aber ich stieß auf das gleiche Problem und dachte mir, ich könnte anderen helfen, die versuchen, herauszufinden.

Ich habe es gelöst, indem ich 2 der Handler-Konfigurationen in der Datei Web.config entfernt habe:

%Vor%

Ich weiß nicht genau, warum es das Problem behoben hat, aber meine Arbeitstheorie ist, dass <remove name="OPTIONSVerbHandler" /> OPTIONS-Anfragen standardmäßig verboten macht. Wenn die Anforderung über angular gesendet wird, sendet sie zuerst eine OPTIONS-Anforderung vor der PUT-Anforderung, sodass sie nie zur PUT-Anforderung gelangt, weil die erste OPTIONS-Anforderung als ungültige http-Methode auf der API abgelehnt wurde.

Im fiddler gehe ich davon aus, dass nur die PUT-Anfrage gesendet wird (das gleiche Verhalten habe ich mit der Postman-Web-App beobachtet, die Anfragen manuell sendet). Daher überspringt es die verbotene OPTIONS-Anfrage und ist erfolgreich.

    
Nathan Hanna 12.04.2016 23:11
quelle
4

Ich hatte auch das gleiche Problem, nach ein paar Nachforschungen habe ich Änderungen an den Dateien web.config und Global.asax.cs vorgenommen

%Vor%

Fügen Sie den folgenden Code global.ascx.cs

hinzu %Vor%     
Gehan Fernando 23.11.2017 08:49
quelle
1

Das ist fast sicher ein CORS-Problem. Ich würde zuerst darüber nachlesen , um sicherzustellen, dass Sie verstehen, was das ist und warum es wichtig ist. Und ich würde vermuten, dass Ihre Serverkonfiguration nicht korrekt ist.

Leider weiß ich nicht viel über .net, aber dieses CORS Tutorial für .net beschreibt, was Sie ganz klar machen sollten.

Anscheinend fehlt Ihnen eine EnableCors Annotation. Es sieht so aus, als müssten Sie Ihrem Controller etwas wie [EnableCors("*", "*", "*")] hinzufügen. Explizite Behandlung von OPTIONEN ist nicht notwendig. Natürlich möchten Sie in der Produktion keine Platzhalter für Ihre CORS-Behandlung verwenden. Sie sollten genauer sein, aber das ist gut für das Testen.

    
Andrew Eisenberg 22.06.2014 16:26
quelle
1

Andrew hat Recht, es ist höchstwahrscheinlich ein CORS-Problem. Was Sie brauchen, ist EnableCors -Attribut zu Ihrer Controller-Klasse hinzufügen, so dass das in etwa so aussieht

%Vor%

Der andere Weg, dies zu tun, wird in diesem Stack-Überlauf-Beitrag

erwähnt     
Shekhar 06.04.2017 20:50
quelle
0

Offensichtlich wird in bestimmten Fällen vor der "echten" Anfrage eine OPTIONS-Anfrage gesendet, um festzustellen, ob die echte Anfrage aufgrund von CORS sicher gesendet werden kann. Siehe den folgenden MS-Artikel unter: Ссылка und suchen Sie nach "Preflight Requests".

Einige der folgenden Q & Amp; As könnten auch helfen:

djikay 22.06.2014 15:27
quelle
0

Ja, ein Oldie, aber ein Leckerbissen. Ich hatte das gleiche Problem und Symptom, aber meine Lösung war selbstverschuldet. Ich werde es trotzdem teilen. Die Art und Weise, wie unser Service den Controller konfiguriert hat, der beim Start in allen MapHttpRoute -Aufrufen verwendet wurde, enthält das [DisableCors] -Attribut. Sobald ich meinen lokalen Computer-Start neu konfiguriert habe, um einen anderen Controller zu verwenden, funktionierte alles. Also, wenn Sie alles andere hier aufgelistet haben, dann überprüfen Sie Ihren Controller und stellen Sie sicher, dass Sie nichts Dummes getan haben, wie ich es tat.

    
No Refunds No Returns 10.04.2018 23:56
quelle