33

ASP.NET MVC Web APIを使用するサイトを作成しましたが、ステージングサーバーに配置するまで、すべてが正常に機能しています。このサイトは、私のローカルマシンと開発Webサーバーで正常に動作します。開発サーバーとステージングサーバーはどちらもWindowsServer2008R2です。

問題はこれです。基本的にサイトは機能しますが、HTTPPUTメソッドを使用する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は機能しないのはなぜですか?

4

9 に答える 9

51

WebDAV を有効にしていないが、MVC 4 の Web API を使用してまだこの問題に遭遇している方のために...

Steve Michelotti は、私にとって有効な解決策をここで文書化しました。

一日の終わりに、すべての動詞 (verb="*") を Web 構成の ExtensionlessUrlHandler-Integrated-4.0 ハンドラーに有効にしました。

<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>
于 2012-04-19T04:15:56.657 に答える
28

これらのIISサーバーにはweb-davモジュールがインストールされていますが、インストールする人がすべてのボックスにチェックを入れたので、それは必要なく、インストールされたに違いありません。

iis から web-dav を削除するだけです。

または、web.config を使用して Web DAV モジュールを削除します。

<system.webServer>
    <modules>
        <remove name="WebDAVModule" />
    </modules>
    ...
于 2012-04-11T07:21:08.130 に答える
13

これが発生する理由はいくつかあるようです。上記のどれも私にとってはうまくいきませんでした。必要なすべての HTTP 動詞を使用して、web.config に ExtensionlessUrlHandler 設定が既にありました。最後に、IIS で次の変更を行う必要がありました。

  • IIS で Web サイトを選択し、ダブルクリックします。Handler Mappings
  • 検索ExtensionlessUrlHandler-ISAPI-4.0_32bitしてダブルクリック
  • 表示されるダイアログで、Request Restrictions
  • [動詞] タブで、欠落している HTTP 動詞をコンマで区切って追加します (私の場合はPUT、およびDELETE
  • 必要な場所をクリックし、ポップアップするダイアログでOk回答Yesします。Edit Script Map
  • 繰り返しますExtensionlessUrlHandler-ISAPI-4.0_64bit

これが誰かに役立つことを願っています:)

于 2016-11-15T20:57:47.100 に答える
5

私のホスティング プロバイダーは WebDAV をアンインストールできませんでした。

この runAllManagedModulesForAllRequests="true" は機能しましたが、推奨されませんでした。

多くの修正には、WebDAVModule のモジュールの削除が含まれていましたが、それでも機能しませんでした。ハンドラーも削除し、最終的にすべての動詞 POST GET PUT DELETE を使用できるようになりました。

モジュールとハンドラーで WebDAVModule と WebDAV を削除します。

<modules>
    <remove name="WebDAVModule" />
</modules>
<handlers>
    <remove name="WebDAV" />
</handlers>
于 2012-11-27T05:34:26.667 に答える
4

これを修正して、UrlScan ISAPI フィルターを削除しました

于 2015-05-19T15:56:21.307 に答える
1

West-Wind の Rick Strahl は、次のことを推奨しています。

    <ハンドラ>
    < remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
    < add name="ExtensionlessUrlHandler-Integrated-4.0"
    パス="*."
    verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS"
    type="System.Web.Handlers.TransferRequestHandler"
    preCondition="integratedMode,runtimeVersionv4.0"
    />
    < /ハンドラ>
    
これは私にとって非常にうまくいきました。

于 2014-04-15T19:48:05.980 に答える