web-dev-qa-db-ja.com

「PUT」メソッドのIIS7.5で「405メソッドは許可されていません」

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

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

しかし、「405 method not allowed」エラーが常に表示されます。応答では、許可されるメソッドは次のとおりです。

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 Request FilteringでPUTメソッドを明示的に許可しても、同じエラーが発生します。

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

98
smwikipedia

失敗した要求トレースを有効にすると、次の情報が得られました。

 <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トレース機能は非常に役立ちます。

42
smwikipedia

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

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

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

21
Nick

here から取得し、それは私のために働いた:

1. IIS Managerに移動します。

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

3.「ハンドラーマッピング」に進みます。

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

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

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

7. [OK]を押します。

18
goran85

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

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

ほとんどの答えを試してみましたが、残念ながら、完成したものはありませんでした。

ここに私のために働いたものがあります。 PUTが必要なサイトに対して行うべき3つのことがあります(サイトを選択します)。

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

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

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

IISを再起動します。

15
coding_idiot

未使用のWebDAV機能を削除することをお勧めします。 Programs and Features=>Windows機能をオンまたはオフにする disableWebDAV Publishingの下

インターネットインフォメーションサービス=>ワールドワイドウェブサービス=>一般的なHTTP機能

enter image description here

9

何らかの理由で、web.configでWebDAVModuleを「削除」とマークしても、私の場合の問題を修正するには不十分です。

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

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

これにより、WebDAVがサポートしていない動詞を拒否することを防ぎ、PUTがRESTfulハンドラーにスムーズに流れるようにします。

4
Dan K

PUT、PATCH、およびDELETEで同じ問題が発生しましたが、WebDavがインストールされていませんでした。この記事の解決策1がようやく助けになりました: http://support.Microsoft.com/kb/942051

3
gust1n

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

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

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

最後に、iisのTRACEハンドラーマッピングで許可された動詞としてPUT動詞を追加しました。エラートレースを有効にしたため、この動詞は動詞を許可していませんでした。

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

2
Harish

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

2
Atilio Jobson

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

2

Windowsサーバー2012の場合->サーバーマネージャーに移動->役割と機能の削除->サーバーの役割-> Webサーバー(IIS)-> Webサーバー->共通HTTP機能-> WebDAV発行のチェックを外して削除->サーバーを再起動します。

1
Savan Gadhiya

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

IIS Manager-> Your site-> Handler Mappings-> PHPxx_via_FastCGI-> Request Restrictions-> Verbsに移動し、PUTを追加します。

それでおしまい!

1
Stefan Pintilie

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

私の場合、Web配置を別のポート(IISポート(80ではない))に再配置しました。最初は気付きませんでしたが、同じポートで両方を実行しているエラーはありませんでしたが、何らかの理由でIISの代わりにWeb Deployが最初に応答し、このエラーを引き起こしているようです。 IISバインディングを別のポートに移動したところ、すべて順調です。 ;)

0
James Wilkins

ここに私のために働いたものがあります:

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

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

0
nPcomp

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

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

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

0
Yush0