IIS405の「PUT」メソッドの「405メソッドは許可されていません」


113

私が使用WebClient私のサーバーに*の.cabファイルをアップロードするタイプ。サーバー側では、次のようにPUTメソッドを使用して* .cabファイルのHTTPハンドラーを登録しました。

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

しかし、「405メソッドは許可されていません」というエラーが常に表示されます。許可されているメソッドは次のとおりです。

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}

WebアプリケーションのIIS要求フィルターでPUTメソッドを明示的に許可した場合でも、同じエラーが発生します。

これはIIS関連の問題だと思います。私は誰かがこれについていくつかの光を当てることができることを望んでいます。

回答:


214

多くの場合、このエラーは、この種の要求を処理しようとするWebDAVモジュールが原因で発生します。簡単な解決策はsystem.webServer、web.configファイル内のセクションのモジュールおよびハンドラーから削除することです。ここに設定例があります:

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

2
次のMS記事を使用して、ハンドラーに削除タグを追加しましたが、それでも機能しませんでした。あなたの回答のおかげで、モジュールセクションにも追加する必要があると思います。とても有難い。これが記事です:asp.net/web-api/overview/testing-and-debugging/…–
Tod Birdsall

すばらしい、デバッグの時間を何時間も節約できました。:)
Kaspars Ozols 16

シンプルで簡単な修正、ありがとう!
MorenajeRD

私はそれを試しましたが、うまくいきません。エラー405-メソッドが許可されていません。IIS Expressを使用していますが、エラーはどういうわけかPUTでのみ発生しますが、GET、POST、およびDELETEで機能します。
ティエリー

46

失敗した要求のトレースを有効にし、次の情報を取得しました。

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

それで、IISからWebDAVModuleをアンインストールしました。

IISトレース機能は非常に役立ちます。


1
ご回答有難うございます !研究の2日後、私が見つけた唯一の作業溶液は、「405メソッドは許可されていません」を避けるためにCORSヘッダを定義することでしたしますApplication_BeginRequest。この回答で述べたように、方法stackoverflow.com/a/14631068/827168。しかし、ランダムパッチを適用する代わりに問題を見つけるのに役立つため、他のすべての回答よりも優れています:)
pomeh

@pomehロジックを完成させることを常に信じています。:)
smwikipedia


1
ハンドラマッピングに移動してそこからWebDAVを削除する必要がありますHandler "WebDAV" has a bad module "WebDAVModule" in its module list。そうしないと、エラーメッセージが表示されます。
pipedreambomb

26

MVC4 WebApiプロジェクトをホストしているときにWebDAVでこの問題が発生しました。この行をweb.configに追加することで回避しました。

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

ここで説明したように:http : //evolutionarydeveloper.blogspot.co.uk/2012/07/method-not-allowed-405-on-iis7-website.html


実際にWebDAVを必要とするユーザーに最適なソリューション。誰かがWebDAVを必要とするかどうかは別の議論です。
MrBoJangles

24

ここから撮影それは私のために働いた:

1. IISマネージャーに移動します。

2.アプリをクリックします。

3.「ハンドラーマッピング」に移動します。

4.機能リストで、「WebDAV」をダブルクリックします。

5.「リクエスト制限」をクリックします。

6.「動詞」タブで「すべての動詞」を選択します。

7. OKを押します。


3
これは役に立ちましたが、私の経験で明らかにします。2.(Webサービス)アプリ。3.中央パネルの[ハンドラーマッピング]アイコンをダブルクリックします。
ゲーリー

19

私はほとんどの答えを試しましたが、残念ながら、どれも完全に機能しませんでした。

ここに私のために働いたものがあります。PUTを実行するサイトに対して3つのことを実行します(サイトを選択)。

  1. 開いて、右側のバーにあるオプションWebDav Authoring Rulesを選択しDisable WebDAVます。

  2. を選択しModules、を見つけてWebDAV Module削除します。

  3. を選択しHandlerMapping、を見つけてWebDAVHandler削除します。

IISを再起動します。


これは機能します!3つの手順すべてをweb.configファイルを編集して実行できるかどうかはわかりませんが、これによりIIS管理コンソールのみを使用して簡単にできました。WebDAV *で始まる3つのHandlerMappingエントリがあることに注意してください-3つすべてを削除しましたが、問題はありませんでした。
SlimsGhost

1
WebDavをアンインストールしてみましたが、うまくいきませんでした。次に、上記の3つの手順をすべて実行し、PUT作業を開始しました。
rareyesdev 2015年

1
手順2と3は、サイトの他の部分に影響を与えることなく仮想ディレクトリに適用できます。
Tonatio 2018

1
どうもありがとう。あなたは私を救いました。7時間の欲求不満の後、私ができるすべての答えを試しました、そして最後にあなたの答えが私に当たりました。:)
Zeeshan Safdar

1
よろしくお願いします。
Ahmad Hamdy

17

WebDAVモジュールを削除するだけで十分です。Web.configを変更するだけです。

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

14

未使用のWebDAV機能を削除するのが最善です。[ プログラムと機能] => [Windowsの機能をオンまたはオフにしてWebDAVパブリッシングを無効にする]に移動します。の下で

インターネットインフォメーションサービス => World Wide Webサービス => 一般的なHTTP機能

ここに画像の説明を入力してください


よろしくお願いします!これは私の問題を完全に修正しました!
wmehanna 2017年

4

何らかの理由で、私のweb.configでWebDAVModuleを「削除」としてマークするだけでは、私の問題を解決するのに十分ではありませんでした。

私は別のアプローチ見つけたなかった問題を解決します。あなたが同じボートに乗っているなら、これを試してください:

  1. IISマネージャーで、PUTをサポートする必要があるアプリケーションを選択します。
  2. 機能ビューで、WebDAVオーサリングルールを見つけます。それをダブルクリックするか、右クリックメニューから[ フィーチャー開く ]を選択します。
  3. [操作]ウィンドウで、[ WebDAV設定... ]を見つけてクリックします
  4. [WebDAV設定]で[ リクエストフィルタリング動作 ]を見つけ、その下で[動詞フィルタリング許可する]を見つけます。[動詞のフィルター許可]を[ False ]に設定します。
  5. [操作]ウィンドウで、[ 適用 ]をクリックします。

これにより、WebDAVがサポートしていない動詞をWebDAVが拒否するのを防ぎ、PUTが悪意のないRESTfulハンドラーを通過できるようにします。


4

私からの別のヒント。私はPHP + IISを使用しており、PHPのハンドラーマッピングにはPUT動詞がありませんでした。

IISマネージャー->あなたのサイト->ハンドラーマッピング-> PHPxx_via_FastCGI->リクエストの制限->動詞に移動し、PUTを追加します。

それでおしまい!


1
これは、phpユーザーが必要とする答えです。
SpeedOfRound 2018年

4

PUTおよびDELETEが機能する前に再構成が必要なもう1つの重要なモジュールは、オプション動詞です。

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

この投稿もご覧ください:https : //stackoverflow.com/a/22018750/9376681



3

私はAngular 8を使用しており、.NETコアAPIでした。サービスのweb.configファイルに以下を追加します。それで私のエラーが解決します。

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

2

私にとってこのエラーは消えず、私がしたことは何でもPUTメソッドを許可します。webdavをアンインストールし、ハンドラーとモジュールからwebdavを削除するためにweb.configに設定を入れ、iisのリクエストフィルターで許可された動詞としてPUTを設定します..リクエストを処理するiisハンドラーマッピングにPUTが構成されていることを確認します。

私の問題は、最終的にはASP.NET 4.5 Extensionsの不適切なインストールが原因でした。サーバーの役割と機能からasp.netに関連するすべてのものを削除しました。再開した。役割を再読み込みして再起動しました。すべては上記の設定で動作しました。

---以下はPUTを受け入れますが、間違ったハンドラに送信します。-以下を無視します

最後に、iisのTRACEハンドラーマッピングで許可動詞としてPUT動詞を追加すると、失敗しました。エラートレースを有効にしていて、この動詞が動詞を許可していなかったためです。

前回、別のサーバーのIISで同じ問題が発生したのは、URLの最後に「/」がないためでした。これは、デフォルトドキュメントを使用せずにデフォルトハンドラーを使用していたためです。他に何も役に立たない場合のハンドラーマッピング。


2

私はこの問題を抱えていましたが、WebDAVに関連する問題は何もありませんでした。私の場合、クライアントはPOSTをwww.myServer.com/api/chartに送信していました。この呼び出しは "ExtensionlessUrlHanlder-Integrated-4.0"で処理する必要がありますが、ローカルファイル構造がサーバーディレクトリ "... \ Server \ api \ chart \"に作成されました。これは、「StaticFile」ハンドラが代わりに呼び出されていたことを意味していました。これらのローカルファイルを削除すると、最終的に問題が解決しました。


2

これが私のために働いたものです:

IISを開き、サイトをクリックします。

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


1

Windows Server 2012の場合->サーバーマネージャーに移動->役割と機能を削除->サーバーの役割-> Webサーバー(IIS)-> Webサーバー->一般的なHTTP機能-> WebDAV公開をオフにして削除->サーバーを再起動します。


0

IISアプリプールがクラシックモードで実行されている場合は、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" />

0

私の場合、Web配置を別のポート(80ではなくIISポート)に再配置しました。最初は気づきませんでしたが、同じポートで両方を実行してもエラーは発生しませんでしたが、何らかの理由でIISの代わりにWeb配置が最初に応答した可能性が高いため、このエラーが発生しました。IISバインディングを別のポートに移動したところ、すべて順調です。;)


0

WebDavがまったく有効にならないようにするには、ApplicationHost.configから次のエントリを削除します。 <add name="WebDAVModule" />

エントリは、モジュールセクションにあります。

構成の正確な場所: C:\Windows\System32\inetsrv\config\applicationHost.config


0

aspnetコア上でRESTful APIを実行すると、同じ問題が発生しました。

WebDAVをアンインストールしたくなかったので、上記のほとんどの解決策を試しました。サイトとサーバーの両方にverbs = "*"を設定しようとしましたが、成功しませんでした。

私にとってトリックは何でしたか:

IISマネージャー->サイト-> MySite-> HandlerMappings-> aspNetCore->編集

->リクエストの制限->アクセス->なし(スクリプトでした)。

その後、元のWebDAVオプションを置き換えても、すべてが機能しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.