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


145

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 di 405, The requested resource does not support http method 'PUT'.

So che le persone hanno problemi con questo in passato e ci sono molti 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 WebDav da applicationhost.config ma questo non ha aiutato. Ad esempio, ho rimosso <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />dal file di configurazione.

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


Questo è ancora rotto nella versione RTM. Ho appena perso 3 ore in questo ... Tutto quello che serviva era aggiungere i verbi extra a ExtensionlessUrl-Integrated-4.0.
leppie il

1
Non penso che questo sia rotto ma è di progettazione. Penso che cambiare il comportamento predefinito interferirebbe con WebDAV e romperebbe la compatibilità all'indietro. Anche questo non funzionava con IIS7 quando WebDAV era installato.
Segna il

Ho anche perso solo 3 ore in questo ... 6 anni dopo questo post.
Brian Jenkins,

Risposte:


162

Va bene. Finalmente sono arrivato al fondo di questo. Devi saltare alcuni cerchi per far funzionare correttamente i verbi PUT e DELETE con IIS8. In effetti, se installi il candidato di rilascio di VS 2012 e crei un nuovo progetto API WEB, scoprirai che i metodi PUT e DELETE di esempio restituiscono 404 errori predefiniti.

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 riga:

<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

per:

<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

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

<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />
<add name="WebDAVModule" /> 
<add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" />

Inoltre, tenere presente che la convenzione API Web predefinita prevede che il nome del metodo sia lo stesso del verbo HTTP richiamato. Ad esempio, se stai inviando una richiesta di eliminazione HTTP, il tuo metodo, per impostazione predefinita, dovrebbe essere chiamato Elimina.


9
Per problemi simili con il verbo OPTIONS su IIS8 (dove qualcos'altro intercetta prima dei gestori) prova <remove name = "OPTIONSVerbHandler" /> nel tuo web.config. In ogni caso, consiglierei di usare la tecnica "rimuovi" nel tuo web.config locale sul messing con applicationhost.config quando possibile come regola generale
Jason

7
Invece di rimuovere WebDAV a livello di server che può avere effetti a catena, è meglio rimuoverlo dal progetto come mostrato qui: stackoverflow.com/a/14465655/428280
Twisted

E poi cosa? Potrebbe anche funzionare localmente ma non funzionerà su Azure
Toolkit

3
Una risposta che indica di modificare le impostazioni di sistema, anche su macchine di sviluppo, non può essere una risposta. Questo risolve un sintomo e non aiuta davvero i team e la produzione. Lo replicherai su ogni macchina? Guarda la risposta di Santosh Sah.
André Werlang,

Inoltre, dovevo anche rimuovere la WebDAVModulesezione dei moduli, come da risposta di Santosh Sah .
Ivaylo Slavov

125

Modifica il tuo file Web.Config come di seguito. Agirà come un fascino.

Nel nodo <system.webServer>aggiungere sotto la parte di codice

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

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

<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>

3
La rimozione di WebDavModule è il modo corretto di risolvere questo problema.
MissRaphie,

6
Salvato il mio giorno: <modules runAllManagedModulesForAllRequests = "true"> <remove name = "WebDAVModule" /> </modules>
Peter Stegnar,

3
Le intestazioni personalizzate non dovrebbero essere necessarie in quanto correlate a CORS e in questo modo stai inducendo una falla nella sicurezza. WebDAVModuleÈ rilevante solo la parte relativa .
André Werlang,

2
Questa risposta è corretta con la sola eccezione che il nome del gestore può differire tra le versioni di IIS, ad esempio 7.5 utilizza "ExtensionlessUrlHandler-Integrated-4.0"(come nella risposta sopra) mentre IIS 8.5 ha questo nome rinominato "ExtensionlessUrl-Integrated-4.0"(anche menzionato da Mark S. Il nome del gestore è mostrato in la pagina di errore IIS, una volta ricevuto l'errore, quindi dovrebbe essere banale sapere quale impostare. Uso entrambi i nomi per supportare diversi ambienti di hosting
Ivaylo Slavov,

7
Mi fa morire un po 'dentro ogni volta che vedo questo - runAllManagedModulesForAllRequests = "true" - come soluzione britishdeveloper.co.uk/2010/06/…
Oliver

61

Rimuovere WebDAV funziona perfettamente per il mio caso:

<modules>
  <remove name="WebDAVModule"/>
</modules>
<handlers>
  <remove name="WebDAV" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.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>

è sempre meglio risolvere il problema tramite web.config invece di risolverlo tramite iis o machine.config per garantire che non accadrà se l'app ospitata su un altro computer


Questo ha funzionato per me, dove gli altri no per qualche motivo (era su IIS 8.5) grazie
John

4
Rimuovere WebDAVModule ha funzionato per me, non è necessario rimuovere il gestore WebDAV (IIS 8.0).
Peter,

3
solo la rimozione di webdav funziona sul framework 4.6.2 iis8.5
Abdul Rehman ha detto l'

45

Aggiorna il tuo web.config

  <system.webServer>
    <modules>
      <remove name="WebDAVModule"/>
    </modules>
    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrl-Integrated-4.0" />
      <add name="ExtensionlessUrl-Integrated-4.0"
           path="*."
           verb="GET,HEAD,POST,DEBUG,DELETE,PUT"
           type="System.Web.Handlers.TransferRequestHandler"
           preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>

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

Elimina la necessità di modificare le configurazioni dell'host.


1
Avevo già scritto un'altra riga ma non funzionava. dopo aver aggiunto le righe <remove name = "WebDAVModule" /> e <remove name = "WebDAV" /> ora funziona. Grazie mille e 1 voto positivo da parte mia.
Banketeshvar Narayan,

Funziona, ma potrebbe non funzionare a causa del blocco della configurazione che impedisce l'uso di <moduli> in web.config. In questo caso, è necessario disabilitare il blocco della configurazione in applicationHost.config. Se per qualche motivo non hai il controllo su applicationHost.config, questo approccio non può essere utilizzato.
Florian Winter,

Ha lavorato con IIS10, anche se ho appena usato "*" come verbo
Javier G.

1
Ha funzionato con IIS 10 e Web API 2. Ha funzionato, dovrei aggiungere, dopo che un'altra dozzina di "soluzioni" che ho trovato online non ha funzionato. Grazie!
Matt West,

@ChrisMarisic: ha funzionato come un incantesimo per me grazie!
Div Tiwari

18

Nell'API Web Asp.Net - webconfig. Funziona con tutti i browser.

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

<webServices>
  <protocols>
    <add name="HttpGet"/>
    <add name="HttpPost"/>
  </protocols>
</webServices>

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

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
  </customHeaders>
</httpProtocol>
<modules runAllManagedModulesForAllRequests="false">
  <remove name="WebDAVModule" />
</modules>

<validation validateIntegratedModeConfiguration="false" />
<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" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

</handlers>


Ho avuto questo problema in IIS 7.5 e questa correzione ha funzionato perfettamente. Invece di eliminare tutto il mio contenuto system.webserver, ho appena unito le impostazioni pertinenti sopra alle mie impostazioni.
Keith Walton,

38
ATTENZIONE : la sezione delle intestazioni personalizzate nel codice sopra consente a QUALSIASI sito di chiamare l'API da un browser, il che rappresenta un grosso rischio per la sicurezza . Leggi su CORS, che è effettivamente ciò che queste intestazioni stanno abilitando.
profMamba,

Ha avuto anche questo problema su IIS 7.5 e ha funzionato. Assicurati di leggere il messaggio di Toolkit sopra sul rischio connesso all'apertura di cors a tutti. Ha anche votato il suo commento perché le notizie come queste sono molto preziose.
sjdirect,

Non penso che in questo caso siano necessarie intestazioni personalizzate. Il resto della system.webserversezione dovrebbe essere sufficiente: assicurati di avere il nome giusto per il gestore di URL senza estensione.
Ivaylo Slavov,

1
@niico Dovresti consentire solo a siti attendibili di Access-Control-Allow-Origin, ovvero sostituire "*" con l'URL del tuo sito web. Questa proprietà è una lista bianca di tutti i siti attendibili, a meno che non si desideri fidarsi dell'intera rete (che in genere è una cattiva idea).
profMamba,

5

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

<system.webServer>
  <security>
  <requestFiltering>
    <verbs applyToWebDAV="false">
       <add verb="DELETE" allowed="true" />
    </verbs>
  </requestFiltering>
  </security>
</system.webServer>

quando si esegue AppCmd, questo è ciò che viene inserito nel proprio web.Config (ad eccezione del bit applyToWebDAV).
Chase Florell,

5

Solo un rapido aggiornamento per chiunque possa riscontrare questo problema. Ad oggi, la modifica di% userprofile% \ documents \ iisexpress \ config \ applicationhost.config NON funziona più (funzionava bene fino ad ora, non sono sicuro che ciò sia dovuto a un aggiornamento di Windows). Dopo ore di frustrazione, ho modificato web.config per aggiungere questi gestori a system.webserver per farlo funzionare:

<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>

4

Abilita CORS (bello e pulito)

1.Aggiungere il pacchetto nuget CORS

Install-Package microsoft.aspnet.webapi.cors

2. nel file WebApiConfig.cs per il metodo Register aggiungi il codice seguente:

config.EnableCors();

es:
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. Aggiungere il codice seguente nello spazio dei nomi del controller include 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<Restaurant> GET()
    {
        return DevTestBLL.GetRestaurant();
    }

    public List<Restaurant> DELETE(int id)
    {
        return DevTestBLL.DeleteRestaurant(id);
    }       
}
}

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


4

Dopo che nulla ha funzionato, sono stato in grado di risolverlo seguendo i passaggi seguenti:

• Non ho selezionato le impostazioni IIS 'WEB DAV PUBLISHING' durante l'installazione di IIS. • INETMGR - Sito Web predefinito - Filtro richieste - Verbi HTTP - PUT come True


3

Dopo aver cercato e provato senza fine le risposte già fornite (aggiungendo i verbi PUT, DELETE e rimuovendo WEBdav) non funzionava.

Sono andato alle impostazioni di registrazione IIS:> Visualizza file di registro. Nel mio caso W3SVC4 era la cartella con l'ultima data, ha aperto la cartella, ha cercato il file di registro più recente e ha visto 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 qui:% windir% \ system32 \ inetsrv \ urlscan \ UrlScan.ini

Fondamentalmente, UrlScan ha bloccato i verbi PUT e DELETE. Ho aperto questo file INI, ho aggiunto PUT e DELETE a AllowVerbs e li ho rimossi dagli elenchi DenyVerbs. Ho salvato il file INI e ha funzionato! Quindi per me questi passaggi erano necessari accanto ai suggerimenti 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)

3

Per PHP, era semplicemente:

  1. Apri IIS
  2. Vai a Mapping gestori
  3. fai clic su modifica su php5.6.xo php7.0.x
  4. fai clic su "richiedi restrizioni"
  5. nella scheda dei verbi, seleziona "uno dei seguenti verbi" e aggiungi "OTTIENI, TESTA, POSTO, MESSA, PATCH, ELIMINA, OPZIONI"

Immagino che funzionerà anche con altri gestori.


2

Oltre a tutte le soluzioni di cui sopra, controlla se hai " id " o se qualsiasi parametro personalizzato definito nel metodo DELETE corrisponde alla configurazione del percorso.

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

Se si verificano ripetuti errori 405, ripristinare la firma del metodo come predefinita come sopra e provare.

La configurazione del percorso per impostazione predefinita cercherà l' id nell'URL. Quindi l' id del nome del parametro è importante qui a meno che non si cambi la configurazione del percorso nella cartella App_Start .

Tuttavia, è possibile modificare il tipo di dati dell'ID .

Ad esempio il metodo seguente dovrebbe funzionare bene:

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

Nota: assicurarsi inoltre di passare i dati sopra l'URL e non il metodo di dati che trasporterà il payload come contenuto del corpo.

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

Esempio:

DELETE http://localhost/item/1

Spero che sia d'aiuto.


2

Ho affrontato lo stesso problema con te, poi l'ho risolto, ecco le soluzioni, vorrei che potesse aiutarti
prima

Nella modulesconfigurazione IIS , esegui il loop del WebDAVModule , se il tuo server web lo possiede, quindi rimuovilo

Secondo

Nella handler mappingsconfigurazione IIS , puoi vedere l'elenco dei gestori di abilitazione, scegliere the PHP item, modificarlo, nella pagina di modifica, fare clic sul pulsante di richiesta restrizioni, quindi selezionare the verbs tabin modale, in specificare l'etichetta dei verbi da gestire, controllare all verbs radio, quindi fai clic su OK, potresti anche vedere un avviso, ci mostra che usa le virgolette doppie per l'esecuzione di PHP-CGI, quindi fallo

se fatto, quindi riavviare il server IIS, andrà bene

inserisci qui la descrizione dell'immagine


1
Ho rimosso WebDAVModule solo dal sito Web IIS e ha funzionato per me
Umair Malhi,

1

Non sono sicuro che tu abbia modificato il file di configurazione corretto. Prova a seguire i passaggi

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

  2. Per impostazione predefinita, le voci indicate di seguito sono commentate nel file applicationhost.config. decommentare queste voci.

<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />


<add name="WebDAVModule" />
<add name="WebDAV" path="*"
 verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK"
 modules="WebDAVModule" resourceType="Unspecified" requireAccess="None"
 />

4
pasticciare con applicationhost.config? no
Toolkit

Non si dovrebbe scherzare con altro che il file di configurazione dell'applicazione. Innanzitutto, lo farai per l'intero server e lo dimenticherai, quindi molte persone si chiederanno come funziona su questa macchina e non su tutto il resto. Inoltre, se non ti è consentito accedere al file di configurazione IIS sul server in cui è ospitata l'applicazione, dovrai elaborarlo in web.config. Immagina che il tuo server dev abbia l'aggiornamento sopra, il tuo web.config sarà accurato? È un ottimo modo per perdere la giornata a qualcuno per indagare sul perché lo spiegamento della produzione è fallito
Ivaylo Slavov,

1

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

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

  2. Fai clic sull'opzione "Filtro richieste". Fai clic sulla scheda "Verbi HTTP".

  3. Fai clic sul link "Consenti verbo ..." nella barra laterale.

  4. Nella casella visualizzata digitare "ELIMINA", fare clic su OK.

  5. Fai di nuovo clic sul link "Consenti verbo ..." nella barra laterale.

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


bel tentativo - qualcosa di diverso per una volta - ma ancora non ha funzionato!
ozzy432836,

Avevo provato tutto il resto che ho visto suggerito su SO e altrove. Alla fine l'ho provato e ha funzionato perfettamente. Nel mio caso, i verbi PUT e DELETE erano già nell'elenco e dovevo prima rimuoverli, quindi aggiungerli di nuovo usando il collegamento Consenti verbo ... ma funzionava quando nient'altro. Grazie mille!
JTennessen,

1

Sto usando un file ashx in un'applicazione MVC e nessuna delle risposte sopra ha funzionato per me. IIS 10.

Ecco cosa ha funzionato. Invece di cambiare " ExtensionlessUrl-Integrated-4.0 " in IIS o web.config ho cambiato " SimpleHandlerFactory-Integrated-4.0 " per i file " * .ashx ":

<add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" 
verb="GET,HEAD,POST,DEBUG,PUT,DELETE" 
type="System.Web.UI.SimpleHandlerFactory" 
resourceType="Unspecified" requireAccess="Script" 
preCondition="integratedMode,runtimeVersionv4.0" />

0

L'altro motivo può essere il seguente:
ho modificato il mio metodo Url per 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 risolto il problema.


0

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

Ciò che mi ha aiutato sono i passaggi seguenti;

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

Ora funziona tutto.


-1

Puoi convertire il tuo metodo Delete come POST come;

 [HttpPost]
 public void Delete(YourDomainModel itemToDelete)
 {
 }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.