Hoe schakel ik HTTP PUT en DELETE in voor ASP.NET MVC in IIS?

Ik gebruik HTTP PUTen DELETEin mijn ASP.NET MVC3-toepassing. Als ik het lokaal uitvoer, werkt alles correct; Maar wanneer ik de toepassing op de server publiceer, werken deze methoden niet.

Zijn er speciale instellingen om een ​​webserver in staat te stellen PUT– en DELETE-verzoeken te ondersteunen? Ik gebruik gedeelde hosting met IIS 7.5.

UPDATE:

Ik schakel PUT– en DELETE-verzoeken in IIS managerin. PUTcommando werkt prima. Maar DELETEwerkt nog steeds niet. Ik maak verzoeken door jQuery:

Ik ben op deze pagina:

http://domain.com/dashboard/edit-site/103323/links/

en mijn ajax-oproep is:

$.ajax({
    // url: same as page-url,
    cache: false,
    type: 'DELETE',
    data: { linkid: $(link).data("linkid") },
    beforeSend: function () {
        // doing something in UI
    },
    complete: function () {
        // doing something in UI
    },
    success: function (data) {
        // doing something in UI
    },
    error: function () {
        // doing something in UI
    }
});

Hiermee wordt een verzoek als volgt aangemaakt:

Accept: */*
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://domain.com
Referer: http://domain.com/dashboard/edit-site/103323/links/
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
X-Requested-With: XMLHttpRequest

Met deze Form Data:

linkid:104044

Antwoord 1, autoriteit 100%

Ga naar Handlertoewijzingenin uw IIS Manager. Zoek ExtensionlessUrlHandler-Integrated-4.0, dubbelklik erop. Klik op de knop Restricties aanvragen…en voeg op het tabblad Werkwoorden zowel DELETEals PUTtoe.


BEWERK: mogelijk probleem met WebDav-uitgever

Je hebt toch in een verwijderd bericht vermeld dat je op een server uit 2008 draaide? Probeer de rol webDavte verwijderen, of schakel deze uit van uw site config: op system.webServer-> modulessectie, verwijder WebDAVModulemodule:

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

Antwoord 2, autoriteit 54%

Als u de volgende foutmelding krijgt in uw productieomgeving in de asp.net web-api op PUTof DELETEhoewel deze methoden lokaal goed werken.

405 – http-werkwoord dat wordt gebruikt om toegang te krijgen tot deze pagina is niet toegestaan.

Voeg de volgende instellingen toe aan de web.config van uw server

<system.webServer>
    <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>
    <modules>
        <remove name="WebDAVModule" />
    </modules>
</system.webServer>

Oorzaak: webDAVmodule blokkeert standaard PUT/DELETE-methoden. Verwijder dus eerst deze module en zijn handler. We verwijderen eerst alle bestaande ExtensionlessUrlHandler-Integrated-4.0 instellingen en voegen deze toe met het gewenste pathen verbs.


Antwoord 3, autoriteit 16%

Je hoeft alleen de volgende regels code toe te voegen aan je web.config

<system.webServer>
 <security>
    <requestFiltering>
        <verbs allowUnlisted="false">
            <add verb="GET" allowed="true" />
            <add verb="POST" allowed="true" />
            <add verb="DELETE" allowed="true" />
            <add verb="PUT" allowed="true" />
        </verbs>
    </requestFiltering>
</security>

EN

<modules>
    <remove name="WebDAVModule" />
</modules>
<handlers>
    <remove name="WebDAV" />
</handlers>

Antwoord 4

Eindelijk vind ik het antwoord flauwekul. Ik heb de jQuery-aanroep gewijzigd in onderstaande en het werkt nu goed.

$.ajax({ 
    url: this.href + "?linkid=" + $(link).data("linkid"), 
    cache: false, 
    type: 'DELETE', 
    // data: { linkid: $(link).data("linkid") }, 
    beforeSend: function () { 
        // doing something in UI 
    }, 
    complete: function () { 
        // doing something in UI 
    }, 
    success: function (data) { 
        // doing something in UI 
    }, 
    error: function () { 
        // doing something in UI 
    } 
});

Heeft u een verklaring waarom een ​​DELETE-aanroep geen Form Datakan hebben? Op lokaal werkte het prima?


Antwoord 5

Ik ben hetzelfde probleem tegengekomen. Jullie hebben alleen toegang tot de API voor serverimplementatie en de-installeren van WebDAV en het is klaar. U kunt hiernaar verwijzen

https://achrafbenalaya.com/ 2020/10/17/405-method-not-allowed-in-iis/


Antwoord 6

De juiste manier om dit te doen is om de echte blocker te achterhalen en vervolgens deze bron te verwijderen in plaats van te gissen. Kijk hier hoe u dit doet: https://stackoverflow.com/a/70530342/592651

Other episodes