[解決済み] ASP.NET Web API - PUT & DELETE 動詞が許可されない - IIS 8
質問内容
先日、Visual Studio 2010からVisual Studio 2012 RCにアップグレードしました。インストーラーにはIIS 8 Expressもインストールされており、Visual StudioはこれをデフォルトのWebサーバーとして使用します。
IIS 8は、PUTおよびDELETE動詞を使用する私のウェブAPIリクエストをブロックしています。IIS は 405 エラーを返します。
The requested resource does not support http method 'PUT'
.
過去にこの問題で困っている人がいることは知っていますし、Stack Overflowにもこの件に関するメッセージがいくつかあります。IIS 7 Expressでは、解決策はWebDavをアンインストールすることでした。残念ながらIIS 8でそれを行う方法は見当たりません。
applicationhost.configからWebDavのセクションを編集してみましたが、解決に至りませんでした。例えば、私は
<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />
を設定ファイルから削除してください。
あまりにも長い時間を費やしてしまいました。PUTとDELETEを有効にする簡単な方法があるはずです?
どのように解決するのですか?
さて、やっとこさ真相にたどり着きました。IIS8でPUTとDELETE動詞を正しく動作させるには、いくつかの輪を飛び越える必要があります。実際、VS 2012のリリース候補をインストールして新しいWEB APIプロジェクトを作成すると、サンプルのPUTとDELETEメソッドはすぐに404エラーを返すことがわかります。
Web APIでPUTとDELETEの動詞を使用するには、%userprofile%documentsのThinkpadを編集し、以下のようにExtensionlessUrlハンドラに動詞を追加する必要があります。
この行を変更してください。
<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
になります。
<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
上記に加えて、WebDAV がリクエストに干渉しないようにする必要があります。これは applicationhost.config から次の行をコメントアウトすることで実現できます。
<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />
<add name="WebDAVModule" />
<add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" />
また、Web API のデフォルトの規約では、メソッド名は呼び出される HTTP 動詞と同じであるべきとされていることに注意してください。例えば、HTTPの削除リクエストを送信する場合、デフォルトではメソッド名をDeleteとする必要があります。
関連
-
.netcoreプロジェクトでIStartupFilterを使用するためのチュートリアル
-
.NET Coreでオブジェクトプールを使用する
-
.NET開発サーバー アプリケーション管理ツール
-
.NET 6における暗黙の名前空間参照
-
ConfigurationManagerのGetSection()メソッドです。
-
[解決済み] Chromeを使用してASP.NET Web APIがXMLの代わりにJSONを返すようにするにはどうすればよいですか?
-
[解決済み] ASP.NET WebサイトとASP.NET Webアプリケーションのどちらを選ぶか?
-
[解決済み] IIS7 の「クラシック」パイプラインモードと「統合」パイプラインモードの違いは何ですか?
-
[解決済み] Server.UrlEncode vs. HttpUtility.UrlEncode
-
[解決済み] Log4netがログファイルにログを書き込まない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
.netcoreプロジェクトでIStartupFilterを使用するためのチュートリアル
-
ASP.NET Core ディペンデンシーインジェクションの詳細
-
[解決済み] ASP.NET MVCコントローラは、Imageを返すことができますか?
-
[解決済み] Server.UrlEncode vs. HttpUtility.UrlEncode
-
[解決済み] Razorとインラインコードブロックによるif文の使用方法
-
[解決済み] ASP.NETの一時ファイルのクリーンアップ
-
[解決済み] Asp.Net 4でValidateRequest="false "が動作しない。
-
[解決済み] Razor _layout.cshtml のファイル名の先頭にアンダースコアがあるのはなぜですか?
-
[解決済み] ASP.NET MVCのHtml.ActionLinkに "active "クラスを追加する方法
-
[解決済み] ASP.NET_SessionId + OWIN Cookieがブラウザに送信されない。