"405 method not allowed" in IIS7.5 for "PUT" method

IisIis 7

Iis Problem Overview


I use WebClient type to upload *.cab files to my server. On the server side, I registered a HTTP handler for *.cab file with the PUT method as below:

 <add name="ResultHandler" path="*.cab" verb="PUT" type="FileUploadApplication.ResultHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" />

But I always get a "405 method not allowed" error. The response said the allowed methods are as below:

Headers = {Allow: GET, HEAD, OPTIONS, TRACE
Content-Length: 1293
Content-Type: text/html
Date: Fri, 27 May 2011 02:08:18 GMT
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET}

Even if I explicitly allow the PUT method in the IIS Request Filtering for my web application, the same error still occurs.

I suspect this is a IIS related issue. I'm hoping someone could shed some light on this for me.

Iis Solutions


Solution 1 - Iis

Often this error is caused by the WebDAV module that try to handle this kind of requests. An easy solution is to remove it from modules and from handlers of the system.webServer section just inside your web.config file. Here a configuration example:

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

Solution 2 - Iis

I enabled the Failed Request Tracing, and got the following info:

 <EventData>
  <Data Name="ContextId">{00000000-0000-0000-0F00-0080000000FA}</Data>
  <Data Name="ModuleName">WebDAVModule</Data>
  <Data Name="Notification">16</Data>
  <Data Name="HttpStatus">405</Data>
  <Data Name="HttpReason">Method Not Allowed</Data>
  <Data Name="HttpSubStatus">0</Data>
  <Data Name="ErrorCode">0</Data>
  <Data Name="ConfigExceptionInfo"></Data>
 </EventData>

So, I uninstalled the WebDAVModule from my IIS, everything is fine now~

The IIS tracing feature is very helpful.

Solution 3 - Iis

I tried most of the answers and unfortunately, none of them worked in completion.

Here is what worked for me. There are 3 things to do to the site you want PUT for (select the site) :

  1. Open WebDav Authoring Rules and then select Disable WebDAV option present on the right bar.

  2. Select Modules, find the WebDAV Module and remove it.

  3. Select HandlerMapping, find the WebDAVHandler and remove it.

Restart IIS.

Solution 4 - Iis

Taken from here and it worked for me:

  1. Go to IIS Manager.

  2. Click on your app.

  3. Go to "Handler Mappings".

  4. In the feature list, double click on "WebDAV".

  5. Click on "Request Restrictions".

  6. In the tab "Verbs" select "All verbs" .

  7. Press OK.

Solution 5 - Iis

I had this problem with WebDAV when hosting a MVC4 WebApi Project. I got around it by adding this line to the web.config:

<handlers>
  <remove name="WebDAV" />
  <add name="WebDAV" path="*" verb="*" modules="WebDAVModule"
      resourceType="Unspecified" requireAccess="None" />
</handlers>

As explained here: http://evolutionarydeveloper.blogspot.co.uk/2012/07/method-not-allowed-405-on-iis7-website.html

Solution 6 - Iis

Best to just remove the unused WebDAV feature. Go to Programs and Features => Turn Windows Features On or Off and disable WebDAV Publishing under

Internet Information Services => World Wide Web Services => Common HTTP Features

enter image description here

Solution 7 - Iis

Removing the WebDAV-module should be sufficient. Just change your Web.config:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule" />

Solution 8 - Iis

I was using Angular 8 and was .NET core API. I add the following in my service web.config file. That resolve my error.

<system.webServer>
  <modules runAllManagedModulesForAllRequests="false">
    <remove name="WebDAVModule" />
  </modules>
</system.webServer>

Solution 9 - Iis

Here is what worked for me:

Open up IIS and click on your Site.

1 - Double Click on the Modules 2 - Right Click on WebDavPublishing and remove. 3 - Restart running WebSite.

Solution 10 - Iis

Another important module that needs reconfiguring before PUT and DELETE will work is the options verb

<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="OPTIONSVerbHandler" />
<remove name="WebDAV" />
<add name="OPTIONSVerbHandler" path="*" verb="*" modules="ProtocolSupportModule" resourceType="Unspecified" requireAccess="Script" />
</handlers>

Also see this post: https://stackoverflow.com/a/22018750/9376681

Solution 11 - Iis

For whatever reason, marking WebDAVModule as "remove" in my web.config wasn't enough to fix the problem in my case.

I've found another approach that did solve the problem. If you're in the same boat, try this:

  1. In the IIS Manager, select the application that needs to support PUT.
  2. In the Features View, find WebDAV Authoring Rules. Double-click it, or select Open Feature from the context menu (right-click).
  3. In the Actions pane, find and click on WebDAV Settings....
  4. In the WebDAV Settings, find Request Filtering Behavior, and under that, find Allow Verb Filtering. Set Allow Verb Filtering to False.
  5. In the Actions pane, click Apply.

This prevents WebDAV from rejecting verbs that it doesn't support, thus allowing a PUT to flow through to your RESTful handler unmolested.

Solution 12 - Iis

I had the same problem, with a RESTful API running on aspnet core.

I didn't want to uninstall the WebDAV, and I tried most of the remedies described above. I tried to set the verbs="*" both on the site and on the server itself, but without success.

What did the trick for me was the following:

IIS Manager -> Sites -> MySite -> HandlerMappings -> aspNetCore -> Edit

-> Request Restrictions -> Access -> None (it was Script).

After that everything worked, even if I replaced the original WebDAV options.

Solution 13 - Iis

I had the same issues with PUT, PATCH and DELETE but didn't have anything with WebDav installed. Resolution 1 in this article finally helped me: http://support.microsoft.com/kb/942051

Solution 14 - Iis

Another tip from me. I have used PHP + IIS, and the Handler Mappings for PHP did not have the PUT verb.

Go to IIS Manager->Your site->Handler Mappings->PHPxx_via_FastCGI->Request Restrictions->Verbs, then add PUT.

That's it!

Solution 15 - Iis

For me this error wouldn't go away and allow PUT methods, whatever i did.. uninstalled webdav, put configuration in web.config to remove webdav from handlers and modules, and set up PUT as an allowed verb on the request filters on iis.. and ensure iis handler mappings handling the request had PUT configured..

My problem was eventually due to bad installation of ASP.NET 4.5 Extensions. Removed everything related to asp.net from server roles and features. restarted. readded the roles and restarted. everything worked with above config.

--- The below will make PUT be accepted, but will send it to the wrong handler. --ignore the below

finally, adding PUT verb as allowed verb on TRACE handler mapping on iis worked.. since i had enabled failed error tracing, and this verb was not allowing the verb.

last time i had the same problem on another server's IIS, it was due to a missing '/' at the end of the URL since it was using a default handler without using the default document probably and now i realize that.. so check IIS handler mappings if nothing else helps.

Solution 16 - Iis

I had this problem but nothing related to WebDAV was the issue. In my case, the client was sending a POST to www.myServer.com/api/chart. This call should be handled by the "ExtensionlessUrlHanlder-Integrated-4.0", however, somehow a local file structure was created in my server directory "...\Server\api\chart". This meant that the "StaticFile" handler was being called instead. Deleting those local files finally solved the problem.

Solution 17 - Iis

For Windows server 2012 -> Go to Server manager -> Remove Roles and Features -> Server Roles -> Web Server (IIS) -> Web Server -> Common HTTP Features -> Uncheck WebDAV Publishing and remove it -> Restart server.

Solution 18 - Iis

for asp.net core 5

IIS-> Sites -> MySite -> HandlerMappings -> aspNetCore -> Request Restrictions -> Access -> None (it was Script).

Solution 19 - Iis

I have a same problem for PUT and DELETE request in IIS10 for asp.net core 5.

I just added below lines in web.config and problem is resolve.

<system.webServer>
  <modules runAllManagedModulesForAllRequests="false">
    <remove name="WebDAVModule" />
  </modules>
</system.webServer>

You can do solve by other way from IIS also.

In IIS, select the application

Add rules to allow HTTP verbs in Request Filtering (But this alone doesn't work).
Go to "Modules", then select the "WebDAV Publishing" module and remove it.
Go to "Handler Mappings", then select the "WebDAV" and remove it.
in cmd run IISRESET

Solution 20 - Iis

This is my solution, alhamdulillah it worked.

  1. Open Notepad as Administrator.
  2. Open this file %windir%\system32\inetsrv\config\applicationhost.config
  3. Press Ctrl-F to find word "handlers accessPolicy"
  4. Add word "DELETE" after word "GET,HEAD,POST".
  5. The sentence will become
  6. The word "PHP_via_FastCGI" can have alternate word such as "PHP_via_FastCGI1" or "PHP_via_FastCGI2".
  7. Save file.

Reference: https://docs.microsoft.com/en-US/troubleshoot/iis/http-error-405-website

Solution 21 - Iis

If IIS app pool is running under classic mode, make sure you have the following in your web.config

<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />

    <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" modules="IsapiModule" scriptProcessor="c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />

Solution 22 - Iis

In my case I had relocated Web Deploy to another port, which was also the IIS port (not 80). I didn't realize at first, but even though there were no errors running both under the same port, seems Web Deploy was most likely responding first instead of IIS for some reason, causing this error. I just moved my IIS binding to another port and all is well. ;)

Solution 23 - Iis

To prevent WebDav from getting enabled at all, remove the following entry from the ApplicationHost.config: <add name="WebDAVModule" />

The entry is located in the modules section.

Exact location of the config: C:\Windows\System32\inetsrv\config\applicationHost.config

Solution 24 - Iis

If you are only developing on your machine, using IIS to run your application and you are not going to use WebDAV then just go to Control Panel > Add or Remove Windows features and disable WebDAV

Control Panel > Add or Remove Windows features and disable WebDAV

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsmwikipediaView Question on Stackoverflow
Solution 1 - IisDavide IcardiView Answer on Stackoverflow
Solution 2 - IissmwikipediaView Answer on Stackoverflow
Solution 3 - Iiscoding_idiotView Answer on Stackoverflow
Solution 4 - Iisgoran85View Answer on Stackoverflow
Solution 5 - IisNickView Answer on Stackoverflow
Solution 6 - IisSliverNinja - MSFTView Answer on Stackoverflow
Solution 7 - IisDunkenView Answer on Stackoverflow
Solution 8 - IisMohammad Atiour IslamView Answer on Stackoverflow
Solution 9 - IisnPcompView Answer on Stackoverflow
Solution 10 - IisMichael RadhuberView Answer on Stackoverflow
Solution 11 - IisDan KView Answer on Stackoverflow
Solution 12 - IisDardan VokshiView Answer on Stackoverflow
Solution 13 - Iisgust1nView Answer on Stackoverflow
Solution 14 - IisStefan PintilieView Answer on Stackoverflow
Solution 15 - Iisuser368191View Answer on Stackoverflow
Solution 16 - IisAtilio JobsonView Answer on Stackoverflow
Solution 17 - IisSavan GadhiyaView Answer on Stackoverflow
Solution 18 - IisLoyola EdwinView Answer on Stackoverflow
Solution 19 - IisBhadresh PatelView Answer on Stackoverflow
Solution 20 - IisMuhammad Zulfan ZubaidiView Answer on Stackoverflow
Solution 21 - IisArjun MukherjiView Answer on Stackoverflow
Solution 22 - IisJames WilkinsView Answer on Stackoverflow
Solution 23 - IisYush0View Answer on Stackoverflow
Solution 24 - IisFelipe Albuquerque de AlmeidaView Answer on Stackoverflow