API Web ASP.NET – Verbi PUT & DELETE non consentiti – IIS 8

Di recente ho eseguito l’aggiornamento da Visual Studio 2010 a Visual Studio 2012 RC. Il programma di installazione installa anche IIS 8 Express che Visual Studio ora utilizza come server Web predefinito.

IIS 8 sta bloccando le mie richieste API WEB che utilizzano i verbi PUT AND DELETE. IIS restituisce un errore 405, The requested resource does not support http method 'PUT' .

So che le persone hanno problemi con questo in passato e ci sono diversi messaggi su Stack Overflow. Con IIS 7 Express la soluzione era disinstallare WebDav. Sfortunatamente non vedo alcun modo per farlo con IIS 8.

Ho provato a modificare le sezioni di WebDav da applicationhost.config ma questo non ha aiutato. Ad esempio ho rimosso dal file di configurazione.

Ho passato troppo tempo su questo. Ci deve essere un modo semplice per abilitare PUT e DELETE?

    Va bene. Finalmente sono arrivato alla fine di questo. È necessario passare attraverso alcuni cerchi per ottenere il corretto funzionamento dei verbi PUT e DELETE con IIS8. Infatti, se si installa la release candidate di VS 2012 e si crea un nuovo progetto di API WEB, si scoprirà che i metodi PUT e DELETE di esempio restituiscono errori 404 immediatamente.

    Per utilizzare i verbi PUT e DELETE con l’API Web è necessario modificare% userprofile% \ documents \ iisexpress \ config \ applicationhost.config e aggiungere i verbi al gestore ExtensionlessUrl come segue:

    Cambia questa linea:

      

    a:

      

    Oltre a quanto sopra, dovresti assicurarti che WebDAV non interferisca con le tue richieste. Questo può essere fatto commentando le seguenti righe da applicationhost.config.

        

    Ricordare inoltre che la convenzione API Web predefinita è che il nome del metodo deve essere uguale al verbo HTTP invocato. Ad esempio, se invii una richiesta di eliminazione HTTP, il tuo metodo, per impostazione predefinita, dovrebbe essere denominato Elimina.

    Cambia il tuo file Web.Config come sotto. Agirà come un incantesimo.

    Nel nodo aggiungi una porzione di codice inferiore

        

    Dopo aver aggiunto, il tuo Web.Config apparirà come di seguito

                          

    Rimuovere il WebDAV funziona perfettamente per il mio caso:

             

    è sempre meglio risolvere il problema tramite web.config invece di andare a risolverlo tramite iis o machine.config per garantire che non si verificherebbe se l’app fosse ospitata su un’altra macchina

    Aggiorna il tuo web.config

                

    http://odetocode.com/blogs/scott/archive/2012/08/07/configuration-tips-for-asp-net-mvc-4-on-a-windows.aspx

    Rimuove la necessità di modificare le tue configurazioni host.

    In Asp.Net Web API – webconfig. Funziona su tutti i browser.

    Aggiungi il seguente codice all’interno del tag System.web

           

    Sostituisci il tuo tag system.webserver con questo codice qui sotto

                        

    questo ha funzionato per me su iis8 insieme ad alcune delle altre risposte. Il mio errore era in particolare 404.6

              

    Solo un rapido aggiornamento per chiunque potrebbe incorrere in questo problema. A partire da oggi, la modifica del% userprofile% \ documents \ iisexpress \ config \ applicationhost.config NON funziona più (questo funzionava bene fino ad ora, non sono sicuro se questo è dovuto ad un aggiornamento di Windows). Dopo ore di frustrazione, ho cambiato il web.config per aggiungere questi gestori a system.webserver per farlo funzionare:

             

    Abilita CORS (bello e pulito)

    1.Aggiungere il pacchetto nuget CORS

     Install-Package microsoft.aspnet.webapi.cors 

    2.nel file WebApiConfig.cs per registrare il metodo aggiungi il codice qui sotto:

     config.EnableCors(); 

    ex:
    utilizzando System.Web.Http;

     namespace test { public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API configuration and services config.EnableCors(); //add this************************** // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } } } 

    3. Aggiungi il codice qui sotto nel namespace del controller includi get, post, delete, put o qualsiasi metodo http

     [EnableCors(origins: "The address from which the request comes", headers: "*", methods: "*")] 

    ex:

     using System.Web.Http.Cors;//add this****************************** namespace Test.Controllers { [EnableCors(origins: "http://localhost:53681/HTML/Restaurant.html", headers: "*", methods: "*")] public class RestaurantController : ApiController { protected TestBusinessLayer DevTestBLL = new TestBusinessLayer(); public List GET() { return DevTestBLL.GetRestaurant(); } public List DELETE(int id) { return DevTestBLL.DeleteRestaurant(id); } } } 

    riferimento: http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

    Dopo che niente ha funzionato, sono stato in grado di risolverlo con i seguenti passaggi:

    • Non ha selezionato le impostazioni IIS di “WEB DAV PUBLISHING” durante l’installazione di IIS. • INETMGR – Sito Web predefinito – Filtro richieste – Verbi HTTP – PUT come True

    Dopo aver cercato senza sosta e provato le risposte già fornite (aggiungendo il PUT, CANCELLA i verbi e rimuovi WEBdav), semplicemente non ha funzionato.

    Sono andato alle impostazioni di registrazione di IIS:> Visualizza file di registro. Nel mio caso W3SVC4 era la cartella con la data più recente, apriva la cartella, cercava il file di registro più recente e vedeva questa voce: GET / Rejected-By-UrlScan ~ / MYDOMAIN / API / ApiName / UpdateMETHOD

    Il metodo di aggiornamento è stato elencato con il verbo GET, strano vero? Così ho cercato su Google per Rejected-By-UrlScan e ho trovato questo link: UrlScan ha rotto il mio blog .

    Sono andato a qui:% windir% \ system32 \ inetsrv \ urlscan \ UrlScan.ini

    Fondamentalmente, l’UrlScan ha bloccato i verbi PUT e DELETE. Ho aperto questo file INI, aggiunto PUT e DELETE alle AllowVerbs e rimosso dagli elenchi di DenyVerbs. Ho salvato il file INI e ha funzionato! Quindi per me questi passaggi erano necessari accanto agli hint ExtensionlessUrlHandler.

    Windows Webserver 2008 R2 (64 bit), IIS 7.5. Sto usando questo in combinazione con DotNetNuke (DNN) WebAPI. ASP.Net 4.0 Il mio metodo di aggiornamento:

     [HttpPut] [DnnAuthorize(StaticRoles = "MyRoleNames")] public HttpResponseMessage UpdateMETHOD(DTO.MyObject myData) 

    Per PHP, era semplicemente:

    1. Apri IIS
    2. Vai a Mappature del gestore
    3. fai clic su modifica su php5.6.xo php7.0.x.
    4. fai clic su “Richieste restrizioni”
    5. sotto la scheda verbi, seleziona “uno dei seguenti verbi” e aggiungi “OTTIENI, TESTA, POST, PUT, PATCH, DELETE, OPZIONI”

    Immagino che funzionerà anche con altri gestori.

    Oltre a tutte le soluzioni di cui sopra, verificare se si dispone di ” id ” o qualsiasi parametro personalizzato definito nel metodo DELETE che corrisponde alla configurazione di route.

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

    Se si colpisce con ripetuti errori 405, ripristinare la firma del metodo su default come sopra e provare.

    La configurazione del percorso di default cercherà l’ id nell’URL. Quindi l’ ID del nome del parametro è importante qui a meno che non si modifichi la configurazione del percorso nella cartella App_Start .

    Puoi però cambiare il tipo di dati dell’ID .

    Ad esempio il metodo seguente dovrebbe funzionare bene:

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

    Nota: accertarsi inoltre di trasferire i dati sull’URL, non sul metodo dati che trasporterà il carico utile come contenuto del corpo.

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

    Esempio:

     DELETE http://localhost/item/1 

    Spero che sia d’aiuto.

    Non sono sicuro di aver modificato il file di configurazione corretto. Prova a seguire i passaggi

    1. apri% userprofile% \ ducuments \ iisexpress \ config \ applicationhost.config

    2. Per impostazione predefinita, le voci date più dettagliate sono commentate nel file applicationhost.config. decommenta queste voci.

       
      

    Ecco come consentire verbi HTTP aggiuntivi utilizzando la GUI di IIS Manager.

    1. In Gestione IIS, selezionare il sito per cui si desidera consentire PUT o DELETE.

    2. Fare clic sull’opzione “Richiedi filtro”. Fare clic sulla scheda “Verbi HTTP”.

    3. Fai clic sul link “Permetti il ​​verbo …” nella barra laterale.

    4. Nella casella che appare digitare “CANCELLA”, fare clic su OK.

    5. Fai di nuovo clic sul link “Permetti il ​​verbo …” nella barra laterale.

    6. Nella casella che appare digitare “PUT”, fare clic su OK.

    Ho affrontato lo stesso problema con te, poi l’ho risolto, Ecco le soluzioni, vorrei che forse potesse aiutarti
    Primo

    Nella configurazione dei modules IIS, riavvia il WebDAVModule , se il tuo server web lo ha, quindi rimuovilo

    Secondo

    Nella configurazione dei handler mappings IIS, è ansible visualizzare l’elenco del gestore di abilitazione, per scegliere the PHP item , modificarlo, sulla pagina di modifica, fare clic sul pulsante di restrizione delle richieste, quindi selezionare the verbs tab nel modale, nel specificare i verbi a maneggia l’etichetta, controlla la all verbs radio , quindi fai clic su OK, forse vedrai anche un avviso, ci mostra che usi le doppie virgolette per l’esecuzione di PHP-CGI, quindi fallo

    se fatto, quindi riavviare il server IIS, sarà ok

    inserisci la descrizione dell'immagine qui

    L’altro motivo può essere il seguente:
    Ho cambiato il mio Url per il metodo Web Api in base a questa risposta :

     Url.Action("MyAction", "MyApiCtrl", new { httproute = "" }) 

    Ma questo metodo crea link come:

     /api/MyApiCtrl?action=MyAction 

    Funziona correttamente con le richieste GET e POST ma non con PUT o DELETE.
    Quindi l’ho appena sostituito con:

     /api/MyApiCtrl 

    e ha risolto il problema.

    Puoi convertire il tuo metodo Delete come POST as;

      [HttpPost] public void Delete(YourDomainModel itemToDelete) { } 

    In IIS 8.5 / Windows 2012R2, Niente menzionato qui ha funzionato per me. Non so cosa si intende rimuovendo WebDAV ma questo non ha risolto il problema per me.

    Ciò che mi ha aiutato sono i seguenti passaggi;

    1. Sono andato al responsabile IIS.
    2. Nel pannello di sinistra selezionato il sito.
    3. Nell’area di lavoro a sinistra, ha selezionato il WebDAV, aperto facendo doppio clic.
    4. Nel pannello più a destra, disabilitato.

    Ora tutto funziona.