Die angeforderte Ressource nicht unterstützt http-Methode "OPTIONS".?
Dass ich die folgende Anforderung an eine asp.net web-api-Methode SETZEN von meinem angular.js AUFTRAGGEBER:
var org = {
OrgId: 111,
name: 'testing testing'
};
$http.put("http://localhost:54822/api/data/putorganisation/1/", org).then(function(status) {
console.log("success PUT");
return status.data;
});
Jedoch immer folgende errormsg (in fiddler):
{"message":"The requested resource does not support http method 'OPTIONS'."}
Dies ist ein Teil meiner asp.net web-api web.config-Datei:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type,x-xsrf-token,X-Requested-With" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
<validation validateIntegratedModeConfiguration="false" />
<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" />
<remove name="WebDAV" />
</handlers>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
</system.webServer>
Daten-controller web-api:
public HttpResponseMessage Options()
{
var response = new HttpResponseMessage();
response.StatusCode = HttpStatusCode.OK;
return response;
}
public HttpResponseMessage PutOrganisation(int id, [FromBody]Organisation org)
{
var opStatus = _Repository.UpdateOrganisation(org);
if (opStatus.Status)
{
return Request.CreateResponse<Organisation>(HttpStatusCode.Accepted, org);
}
return Request.CreateErrorResponse(HttpStatusCode.NotModified, opStatus.ExceptionMessage);
}
Hier ist meine Frage: Warum bekomme ich die errormsg ( siehe oben), wenn ich genau die gleiche Anfrage in fiddler ( funktioniert) wie in der angularclient (funktioniert nicht)??
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß, das ist eine alte Frage, aber ich lief in das gleiche problem und dachte, ich könnte anderen helfen, die herausfinden möchten.
Ich löste es durch das entfernen von 2 von der hf-Konfigurationen in der Web.config:
Ich weiß nicht genau, warum das problem behoben, aber mein Arbeits Theorie ist, dass
<remove name="OPTIONSVerbHandler" />
macht OPTIONEN Anfragen verboten standardmäßig. Beim senden der Anfrage durch den Winkel, sendet es eine OPTIONS-Anfrage, bevor die PUT-Anfrage, so kommt es gar nicht auf die PUT-Anforderung, da die ersten OPTIONEN, die Anfrage wurde verweigert, da eine ungültige http-Methode auf die api.In fiddler, ich gehe davon aus, dass es nur sendet nur die PUT-Anfrage (die ich beobachtet habe das gleiche Verhalten mit dem Postboten web-app das senden von Anfragen manuell). So springt Sie von der Verbotenen OPTIONS-Anfrage und gelingt.
<customHeaders> <add name="Access-Control-Allow-Credentials" value="true"/> <add name="Access-Control-Allow-Origin" value="http://appdomain.com" /> <add name="Access-Control-Allow-Methods" value="GET, PUT, POST, DELETE, OPTIONS" /> <add name="Access-Control-Allow-Headers" value="Content-Type" /> </customHeaders>
OPTIONSVerbHandler
undExtensionlessUrlHandler-Integrated-4.0
dann war ich immer404
für bestehende Anforderungen. Jedoch gelöst, wenn ich kommentierte nurOPTIONSVerbHandler
<!--<remove name="OPTIONSVerbHandler" />-->
hat es für neIch auch vor dem gleichen Problem, nach einigen Forschung, ich habe folgende änderungen an web.config und Global.asax.cs-Dateien
Fügen Sie den folgenden code global.ascx.cs
Dies ist fast sicher ein CORS-problem. Ich würde zunächst Lesen Sie über es um sicherzustellen, dass Sie verstehen, was das ist und warum es so wichtig ist. Und ich würde vermuten, dass Ihre server-Konfiguration ist nicht korrekt.
Leider weiß ich nicht viel über .net, aber diese CORS tutorial für .net beschreibt, was Sie tun sollten, ganz klar.
Wie es aussieht, fehlt eine
EnableCors
annotation. Es sieht aus wie Sie brauchen, um etwas hinzuzufügen, wie[EnableCors("*", "*", "*")]
zu Ihrer Steuerung. Explizite Handhabung der OPTIONEN ist nicht notwendig. Natürlich, in producition, die Sie nicht wollen, um die Verwendung von Platzhaltern für Ihre CORS Handhabung. Sie sollten genauer sein, aber das ist in Ordnung für die Prüfung.Andrew korrekt ist, ist es wahrscheinlich eine CORS-Problem. Was Sie brauchen, ist zum hinzufügen
EnableCors
- Attribut zu Ihrer Controller-Klasse so, dass ist in etwa so aussieht wie diesesDen anderen Weg, dies zu tun ist, erwähnt in diesem stack-overflow-post
Yep, ein oldie aber ein goodie. Ich hatte das gleiche problem und symptom aber meine Auflösung war selbstverschuldet. Ich Teile es trotzdem. Der Weg, den unser service konfiguriert die controller in allen der
MapHttpRoute
ruft beim Start enthalten die[DisableCors]
Attribut. Sobald ich neu konfiguriert meinem lokalen Rechner starten, um mit einem anderen controller funktioniert alles. Also, wenn Sie getan haben, alles andere hier überprüfen Sie den controller und stellen Sie sicher, dass Sie nicht etwas dummes zu tun, wie ich es Tat.Offenbar in bestimmten Fällen, eine OPTIONS-Anfrage gesendet wird, bevor die "echte" Anfrage, um zu bestimmen, ob das eigentliche Anliegen ist sicher zu senden, aufgrund CORS. Finden Sie unter den folgenden MS Artikel: http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api und suchen Sie nach "Preflight Requests".
Einige der folgenden F&Wie könnte auch helfen: