Ik gebruik HTTP PUT
en DELETE
in 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 manager
in. PUT
commando werkt prima. Maar DELETE
werkt 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 DELETE
als PUT
toe.
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
-> modules
sectie, verwijder WebDAVModule
module:
<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 PUT
of DELETE
hoewel 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 path
en 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 Data
kan 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