I use HTTP PUT
and DELETE
in my ASP.NET MVC3 application. When I run it in local, every thing works correctly; But when I publish the application to the server, these methods do not work.
Are there any special settings for enable a web server to support PUT
and DELETE
requests? I'm using shared hosting with IIS 7.5.
UPDATE:
I enable PUT
and DELETE
requests in IIS manager
. PUT
command work fine. But DELETE
still not works. I create requests by jQuery
:
I'm in this page:
http://domain.com/dashboard/edit-site/103323/links/
and my ajax call 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 } });
This will create a request like this:
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
With this Form Data
:
linkid:104044
From inside the IIS management screen right click on your website or virtual directory. Go to Properties then go to the Home Directory or Virtual Directory tab and click on the Configuration button. From there you can add/update extensions and what Verbs are accepted.
Go to Handler Mappings in your IIS Manager. Find ExtensionlessUrlHandler-Integrated-4.0
, double click it. Click Request Restrictions... button and on Verbs tab, add both DELETE
and PUT
.
EDIT: Possible WebDav Publisher issue
You've mention on a deleted post you were running on a 2008 server right? Try removing webDav role, or disable it from your site config
: on system.webServer
-> modules
section, remove WebDAVModule
module:
<system.webServer> <modules> <remove name="WebDAVModule" /> </modules> <handlers> <remove name="WebDAV" /> </handlers> </system.webServer>
If you are getting following error in your production environment in the asp.net web api on PUT
or DELETE
though these methods are working fine locally.
405 - http verb used to access this page is not allowed.
Just add following settings in your server's web.config
<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>
Cause: webDAV module blocks PUT/DELETE methods by default. So first remove this module and its handler. We first remove any existing ExtensionlessUrlHandler-Integrated-4.0 settings and add it with desired path
and verbs
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With