it-swarm.com.de

Asp.NET Web API - 405 - HTTP-Verb für den Zugriff auf diese Seite ist nicht zulässig. Festlegen von Handlerzuordnungen

Ich habe den REST -Dienst mit der ASP.NET-Web-API geschrieben. __ Ich versuche, eine HttpDelete-Anforderung zu senden, erhalte jedoch die folgende Fehlermeldung:

405 - Für den Zugriff auf diese Seite wird kein HTTP-Verb verwendet

Ich glaube, ich bin nahe an der Lösung. Ich habe herausgefunden, dass ich IIS Remote Management aktivieren, zum Handler Mappings-Abschnitt gehen und DELETE-Verb an der entsprechenden Stelle hinzufügen muss ....__ Es gibt viele verschiedene Positionen auf der Liste ... (. wie hier: http://www.somacon.com/p126.php ).

Welches sollte ich bearbeiten? Einige von ihnen haben keine Erweiterung, z. "ExtensionUrlHandler-Integrated-4.0" und ich habe DELETE-Verb hinzugefügt, aber es funktioniert immer noch nicht ...

Es war nur ein Schuß im Dunkeln, diesen zu modifizieren, sollte ich also eine andere Position ändern? Wenn ja, welcher? Oder gibt es vielleicht mehr, was ich tun soll?

Derselbe Webdienst funktioniert auf meinem lokalen Dienst einwandfrei, daher liegt das Problem wahrscheinlich beim Remote-IIS ...

Schöne Grüße

85
Bart

Häufige Ursache für diesen Fehler ist WebDAV . Stellen Sie sicher, dass Sie es deinstallieren.

24
Darin Dimitrov

Sie müssen WebDAV nicht deinstallieren, sondern fügen Sie der web.config einfach diese Zeilen hinzu:

<system.webServer>
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
  </handlers>
</system.webServer>
302
giacomelli

Ändern Sie Ihre Web.Config-Datei wie folgt

 <system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV"/>
<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>
</system.webServer>
16
Hithesh

Ändern Sie Ihre Web.Config-Datei wie folgt. Es wird wie Charme wirken.

Fügen Sie im Knoten <system.webServer> einen Teil des Codes hinzu

<modules runAllManagedModulesForAllRequests="true">
  <remove name="WebDAVModule"/>
</modules>

Nach dem Hinzufügen sieht Ihre Web.Config wie folgt aus

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule"/>
    </modules>
    <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>
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>
14

Ich hatte dieses Problem und habe Folgendes gelöst:

  1. iIS öffnen
  2. Wählen Sie die Backend-Site

     enter image description here 

  3. in der Featureansicht: Öffnen Sie die Handlerzuordnung

 enter image description here 

  1. suchen Sie im Fenster Handlerzuordnung nach WebDAV

 enter image description here 

  1. öffnen Sie unter Modulzuordnung bearbeiten die Option Anforderungseinschränkungen

 enter image description here 

  1.  enter image description here 
4
BehrouzMoslem

Wenn keine der oben genannten Lösungen Ihr Problem wie in meinem Fall gelöst hat (immer noch mit meinem RestClient-Modul gegenüber 405), versuchen Sie, Ihr Api mit einem Tool wie Postman oder Fiddler anzufordern. Ich meine, das Problem könnte anderswo sein wie eine schlecht formatierte Anfrage. 

Ich stelle fest, dass mein RestClient-Modul nach einem 'Put' gefragt hat, dessen ID-Parameter nicht richtig formatiert ist: 

http://myserver/api/someresource?id=75fd954d-d984-4a31-82fc-8132e1644f78

anstatt

http://myserver/api/someresource/75fd954d-d984-4a31-82fc-8132e1644f78

Falsch formatierte Anforderung gibt fälschlicherweise 405 zurück - Methode nicht zulässig (IIS 7.5) 

4

Ungewöhnlich, kann aber einigen helfen.

stellen Sie sicher, dass Sie [HttpPut] aus System.Web.Http verwenden.

Wir bekamen eine 'Methode nicht erlaubt' 405 auf einer HttpPut-dekorrierten Methode.

Unser Problem scheint ungewöhnlich zu sein, da wir versehentlich das [HttpPut] -Attribut von System.Web.Mvc und nicht von System.Web.Http verwendet haben

Resharper schlug die .Mvc-Version vor, wobei in der Regel auf System.Web.Http verwiesen wird, wenn Sie direkt von ApiController ableiten.

3
Nick Josevski

Dieser Fehler kommt vom statischen Dateihandler - der standardmäßig keine Verben filtert, aber wahrscheinlich nur mit HEAD und GET umgehen kann.

Und das liegt daran, dass kein anderer Handler an die Platte trat und sagte, dass sie DELETE handhaben könnten.

Da Sie die WEBAPI verwenden, die aufgrund des Routings keine Dateien und daher Erweiterungen enthält, müssen der web.config-Datei folgende Ergänzungen hinzugefügt werden:

<system.webserver>
    <httpProtocol>
        <handlers>
          ...
            <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
            <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
            <remove name="ExtensionlessUrlHandler-Integrated-4.0" />

            <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="C:\windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
            <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="C:\windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
            <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

Was benötigt ist, hängt natürlich vom klassischen Modus und vom integrierten Modus ab, und der klassische Modus hängt von der Bitness ab. Darüber hinaus wurde der OPTIONS-Header für die CORS-Verarbeitung hinzugefügt. Wenn Sie jedoch kein CORS ausführen, benötigen Sie dies nicht.

Zu Ihrer Information: Ihre web.config ist die lokale Version der Anwendung (oder des Anwendungsverzeichnisses), deren oberste Ebene applicationHost.config ist. 

2
Gerard ONeill

Dies war der Fall (405 Methode nicht zulässig), wenn die Web-API-Post-Methode, die ich aufrief, primitive Typen für Parameter hatte, anstelle eines komplexen Typs, auf den vom Körper aus zugegriffen wurde. So wie:

Das hat funktioniert:

 [Route("update"), Authorize, HttpPost]
  public int Update([FromBody] updateObject update)

Das tat nicht:

 [Route("update"), Authorize, HttpPost]
 public int Update(string whatever, int whatever, string whatever)
2
Tony Anderson

Wenn es IIS 8.0 ist, prüfen Sie, ob die HTTP-Aktivierung aktiviert ist. Server-Manager -> IIS -> Verwalten (siehe rechts oben) -> Rollen und Features hinzufügen -> ... -> zur WCF-Konfiguration gehen und dann HTTP-Aktivierung auswählen.

1
Narsi Venkat

Ich füge für diejenigen hinzu, die beim Ausführen von PHP (Laravel in manchen Fällen) oder einer anderen eindeutigen IIS-Hostsituation mit dem 405 error hängen bleiben, dass Sie die verbs im Handler für diese spezielle Situation ändern müssen ... also seit ich Ich habe PHP verwendet. Ich bin zum PHP-Handler gegangen und habe im Request Restrictions auf der Registerkarte Verbs die verbs hinzugefügt, die Sie benötigen. Dies war alles, was ich zum web.config hinzufügen musste, um CORS in Laravel zu aktivieren.

<handlers>
  <remove name="php-5.6.40" />
  <add name="php-5.6.40" path="*.php" verb="GET,HEAD,POST,PUT,DELETE,OPTIONS" modules="FastCgiModule" scriptProcessor="C:\Program Files (x86)\PHP\v5.6\php-cgi.exe" resourceType="Either" requireAccess="Script" />
</handlers>
0
Serj Sagan

Überprüfen Sie neben allen oben genannten Lösungen, ob der Parameter "id" oder ein benutzerdefinierter Parameter in der DELETE-Methode mit der Routen-Konfiguration übereinstimmt.

public void Delete(int id)
{
    //some code here
}

Wenn Sie mit wiederholten 405 Fehlern auftauchen, setzen Sie die Methodensignatur besser auf den Standard zurück und versuchen Sie es.

Die Routenkonfiguration sucht standardmäßig in der URL nach id. Der Parametername id ist hier also wichtig, es sei denn, Sie ändern die Routenkonfiguration im Ordner App_Start.

Sie können den Datentyp der id jedoch ändern.

Zum Beispiel sollte die Methode unten gut funktionieren:

public void Delete(string id)
{
    //some code here
}

Hinweis: Stellen Sie außerdem sicher, dass Sie die Daten über die URL nicht die Datenmethode übergeben, die die Nutzdaten als Hauptinhalt enthält.

DELETE http://{url}/{action}/{id}

Beispiel:

DELETE http://localhost/item/1

Ich hoffe es hilft.

0
Arun

In unserem Fall lag das Problem bei der Verbundanmeldung zwischen einer .Net-Site und ADFS. Beim Umleiten an den ADFS-Endpunkt benötigte der wctx-Parameter alle drei Parameter für die WSFederationAuthenticationModule.CreateSignInRequest-Methode: rm, id und ru

Vielen Dank an Guillaume Raymond für den Tipp zur Überprüfung der URL-Parameter!

0
dan fox