ASP.NET MVC Web APIを使用するサイトを作成しましたが、ステージングサーバーに配置するまですべてが正常に機能しています。このサイトは、ローカルマシンとdev Webサーバーで正常に動作します。開発サーバーとステージングサーバーはどちらもWindows Server 2008 R2です。
問題はこれです。基本的にサイトは機能しますが、HTTP PUTメソッドを使用するAPI呼び出しがいくつかあります。これらは404を返すステージングでは失敗しますが、他の場所では正常に機能します。
私が出会って修正した最初の問題は、リクエストのフィルタリングにありました。しかし、まだ404を取得しています。
IISでトレースをオンにすると、次の問題が発生します。
168. -MODULE_SET_RESPONSE_ERROR_STATUS
ModuleName IIS Web Core
Notification 16
HttpStatus 404
HttpReason Not Found
HttpSubStatus 0
ErrorCode 2147942402
ConfigExceptionInfo
Notification MAP_REQUEST_HANDLER
ErrorCode The system cannot find the file specified. (0x80070002)
構成は開発とステージングで同じです。実際、サイト全体が直接コピーです。
GETとPOSTは機能するが、PUTは機能しないのはなぜですか?
それらのIISサーバーにはweb-davモジュールがインストールされていますが、インストールする人がすべてのボックスにチェックマークを付けたため、これは不要でありインストールされたに違いありません。
Iisからweb-davを削除するだけです。
または、web.configを使用してweb davモジュールを削除します。
<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
...
WebDAVが有効になっていないが、MVC 4のWeb APIを使用してこの問題がまだ発生している場合...
スティーブ・ミケロッティは私のために働いた解決策を文書化した ここ 。
一日の終わりに、Web構成でExtensionlessUrlHandler-Integrated-4.0ハンドラーに対してすべての動詞(verb = "*")を有効にしました。
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true" />
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
これにはいくつかの理由が考えられます。上記のどれも私にとってはうまくいきませんでした。 web.configにExtensionlessUrlHandler設定があり、必要なすべてのHTTP動詞が含まれています。最終的に、IISで次の変更を行う必要がありました。
Handler Mappings
をダブルクリックしますExtensionlessUrlHandler-ISAPI-4.0_32bit
を見つけてダブルクリックしますRequest Restrictions
]をクリックしますPUT
とDELETE
でした)Ok
をクリックし、ポップアップするEdit Script Map
ダイアログでYes
と答えます。ExtensionlessUrlHandler-ISAPI-4.0_64bit
について繰り返しますこれが誰かを助けることを願っています:)
ホスティングプロバイダーはWebDAVをアンインストールできませんでした。これはすべてのユーザーに影響するためです。
これ、runAllManagedModulesForAllRequests = "true"は機能しましたが、推奨されませんでした。
多くの修正には、WebDAVModuleのモジュールの削除が含まれていましたが、それでも動作しませんでした。ハンドラーも削除し、最後にすべての動詞POST GET PUT DELETE。
モジュールとハンドラーでWebDAVModuleとWebDAVを削除します。
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
UrlScan ISAPIフィルターを削除してこれを修正しました
私の場合、これらのソリューションはいずれも適用されませんでした。
アプリプールをClassicではなくIntegratedに変更して修正しました。
ハンドラー:
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
preCondition
はintegratedMode
であるため、Classicアプリプールでは動作しません。
West-WindのRick Strahlは次のことを推奨しました。
<ハンドラー> <remove name = "ExtensionlessUrlHandler-Integrated-4.0" /> <add name = "ExtensionlessUrlHandler-Integrated-4.0" path = " *。 " verb =" GET、HEAD、POST、DEBUG、PUT、DELETE、PATCH、OPTIONS " type =" System.Web.Handlers.TransferRequestHandler " preCondition = "integratedMode、runtimeVersionv4.0" /> </handlers>
こんにちは私にとっては、解決策はありませんでした。私は最終的にこれをやって働いた:
1)IISアプリケーションを選択してください。
2)要求フィルタリングに移動
3)次に、[HTTP Verbs]タブを選択します
4)PUTおよびその他の動詞がfalseを許可していることがわかりましたが、編集することができなかったため、動詞を削除してから、右側のペインで[動詞を許可]を選択するか、リストを右クリックしてそれを選択します。問題を抱えている動詞を入力してください!
これが誰かを助けることを願っています!
以前にクラシックモードであったWebサイトのアプリケーションプールを統合モードに変更することで、これを解決しました。