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関連の問題であると思われます。誰かが私にこれについていくらか光を当てることを望んでいます。
失敗した要求トレースを有効にすると、次の情報が得られました。
<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トレース機能は非常に役立ちます。
多くの場合、このエラーは、この種の要求を処理しようとするWebDAVモジュールが原因です。簡単な解決策は、web.configファイル内のモジュールおよびsystem.webServer
セクションのハンドラーから削除することです。ここに設定例:
<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
</system.webServer>
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
here から取得し、それは私のために働いた:
1. IIS Managerに移動します。
2.アプリをクリックします。
3.「ハンドラーマッピング」に進みます。
4.機能リストで、「WebDAV」をダブルクリックします。
5.「リクエストの制限」をクリックします。
6.「動詞」タブで「すべての動詞」を選択します。
7. [OK]を押します。
WebDAVモジュールを削除するだけで十分です。 Web.configを変更するだけです。
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
ほとんどの答えを試してみましたが、残念ながら、完成したものはありませんでした。
ここに私のために働いたものがあります。 PUTが必要なサイトに対して行うべき3つのことがあります(サイトを選択します)。
WebDav Authoring Rules
を開き、右側のバーにあるDisable WebDAV
オプションを選択します。
Modules
を選択し、WebDAV Module
を見つけて削除します。
HandlerMapping
を選択し、WebDAVHandler
を見つけて削除します。
IISを再起動します。
何らかの理由で、web.configでWebDAVModuleを「削除」とマークしても、私の場合の問題を修正するには不十分です。
didが問題を解決する別のアプローチを見つけました。同じ船に乗っているなら、これを試してください:
これにより、WebDAVがサポートしていない動詞を拒否することを防ぎ、PUTがRESTfulハンドラーにスムーズに流れるようにします。
PUT、PATCH、およびDELETEで同じ問題が発生しましたが、WebDavがインストールされていませんでした。この記事の解決策1がようやく助けになりました: http://support.Microsoft.com/kb/942051
私にとって、このエラーは消えず、PUTメソッドを許可します.webdavをアンインストールし、web.configに設定を入れてwebdavをハンドラーとモジュールから削除し、IISのリクエストフィルターで許可された動詞としてPUTを設定します..要求を処理するIISハンドラーマッピングにPUTが構成されていることを確認します。
私の問題は、最終的にASP.NET 4.5 Extensionsの不適切なインストールが原因でした。サーバーの役割と機能からasp.netに関連するすべてを削除しました。再起動しました。役割を再追加して再起動しました。上記の設定ですべてが機能しました。
---以下はPUTを受け入れますが、間違ったハンドラーに送信します。 -以下を無視
最後に、iisのTRACEハンドラーマッピングで許可された動詞としてPUT動詞を追加しました。エラートレースを有効にしたため、この動詞は動詞を許可していませんでした。
前回、別のサーバーのIISで同じ問題が発生したのは、デフォルトのドキュメントを使用せずにデフォルトのハンドラーを使用していたため、URLの末尾に「/」がないためでした。IIS他に何も役に立たない場合のハンドラーマッピング。
この問題はありましたが、WebDAVに関連するものは何もありませんでした。私の場合、クライアントはPOSTをwww.myServer.com/api/chartに送信していました。この呼び出しは、「ExtensionlessUrlHanlder-Integrated-4.0」で処理する必要がありますが、サーバーディレクトリ「...\Server\api\chart \」にローカルファイル構造が作成されました。つまり、代わりに「StaticFile」ハンドラーが呼び出されていました。これらのローカルファイルを削除することで、問題は最終的に解決されました。
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
Windowsサーバー2012の場合->サーバーマネージャーに移動->役割と機能の削除->サーバーの役割-> Webサーバー(IIS)-> Webサーバー->共通HTTP機能-> WebDAV発行のチェックを外して削除->サーバーを再起動します。
私からの別のヒント。 PHP + IISを使用しましたが、PHPのハンドラーマッピングにはPUT動詞がありませんでした。
IIS Manager-> Your site-> Handler Mappings-> PHPxx_via_FastCGI-> Request Restrictions-> Verbsに移動し、PUTを追加します。
それでおしまい!
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" />
私の場合、Web配置を別のポート(IISポート(80ではない))に再配置しました。最初は気付きませんでしたが、同じポートで両方を実行しているエラーはありませんでしたが、何らかの理由でIISの代わりにWeb Deployが最初に応答し、このエラーを引き起こしているようです。 IISバインディングを別のポートに移動したところ、すべて順調です。 ;)
ここに私のために働いたものがあります:
IISを開き、サイトをクリックします。
1 - Double Click on the Modules 2 - Right Click on WebDavPublishing and remove. 3 - Restart running WebSite.
WebDavがまったく有効にならないようにするには、ApplicationHost.configから次のエントリを削除します。<add name="WebDAVModule" />
エントリはモジュールセクションにあります。
構成の正確な場所:C:\Windows\System32\inetsrv\config\applicationHost.config