59

IIS 7.5 が POST および PUT 要求を処理する方法を理解しようとしています。

OpenRasta フレームワークを使用して RESTful サービスを作成しています。POST 操作は問題なく機能しますが、同じ URL に対する PUT 操作は機能しません。以下のようなエラーを返します

Detailed Error Information
Module: IIS Web Core
Notification: MapRequestHandler
Handler: StaticFile
Error Code: 0x80070002

URLは「http://localhost/MyService/Resource.Something.manifest」に続くこのようなものです

Visual Studio 開発 IIS でも同じ設定で問題なく動作します。

解決

基本的に、デフォルトの ExtensionlessUrlHandler は PUT および DELETE 動詞を受け入れません。それらを追加するだけです。

<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" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
4

15 に答える 15

80

PUT と DELETE が IIS 7.5 で PHP 5.4 の高速 CGI 駆動型 REST API に受け入れられるようにするには、WebDAV モジュールを無効にする必要がありました。それ以外の場合、WebDAV モジュールは PUT または DELETE を使用して HTTP 要求に介入します。ただし、これを機能させるには少し混乱があり、いくつかの手順を見逃したか、別の順序で実行した可能性があります。

これらの行は、アプリケーション ルートのweb.config<system.webServer>の- 要素の子として配置されます。

<modules>
    <remove name="WebDAVModule" />
</modules>
<handlers>
    <remove name="WebDAV" />
</handlers>

これでフラストレーションが解消されることを願っています。サーバーのデフォルト設定は、リストされていない HTTP 動詞を受け入れるようになっているようです - の設定を参照してくださいRequest filtering -> HTTP Verbs -> Edit feature Settings。許可される動詞を明示的に追加することを検討することができます。許可される動詞は、このスニペットを の子として追加して指定することもできます<system.webServer>

    <security>
        <requestFiltering>
            <verbs allowUnlisted="false">
                <add verb="GET" allowed="true" />
                <add verb="POST" allowed="true" />
                <add verb="DELETE" allowed="true" />
                <add verb="PUT" allowed="true" />
            </verbs>
        </requestFiltering>
    </security>

クライアント マシンでは、ここから WebDAV モジュールをアンインストールできます。

Control Panel -> Uninstall Program -> Turn Windows features on or off -> IIS -> World Wide Web Services -> Common HTTP feautre -> WebDAV Publishing

それを機能させるための最後の手段は、 にある編集によるものでしapplicationhost.configC:\Windows\System32\inetsrv\config。その中に、必要な動詞を追加するように修正する<system.webServer> -> <handlers>だけの php エントリが表示されます。verb="GET,HEAD,POST

<add name="PHP54_via_FastCGI" path="*.php" verb="GET,HEAD,PUT,DELETE,POST"/>
                                                                 |
                                                                 |
                                                                 |
append verbs here  ----------------------------------------------|
于 2013-04-29T09:53:12.613 に答える
33

1.IIS マネージャーに移動します。
2.アプリをクリックします。
3.「ハンドラー マッピング」に移動します。
4.機能リストで、「WebDAV」をダブルクリックします。
5.「リクエスト制限」をクリックします。
6.「動詞」タブで「すべての動詞」を選択します。
7.OK を押します。

于 2015-02-05T13:16:10.807 に答える
11

ORwikiからリンクされているhttp://learn.iis.net/page.aspx/901/iis-express-faq/を参照してください。

リンクから(読みやすさのためにブロック引用されていません):

applicationHost.configA:フォルダー内のIISExpressを変更でき%userprofile%\documents\IISExpress\configます。たとえば、拡張機能のないURLに対してPUTとDELETEを有効にするには、IIS ExpressapplicationHost.configファイルの一番下までスクロールし、次で始まるハンドラーエントリを探します。

<add name="ExtensionlessUrl-Integrated-4.0"

verb属性addPUTで、属性は次のようDELETEになりverbますverb="GET,HEAD,POST,DEBUG,PUT,DELETE"

于 2011-08-15T11:09:38.713 に答える
9

私のシナリオは、IIS 7.5 上の Web サイトの Web アプリケーションでした。Web サイトでは引き続き WebDAV を有効にする必要がありましたが、Web アプリケーションでは REST API で PUT と DELETE をサポートするために WebDAV を無効にする必要がありました。

これを機能させるには、Web アプリケーションの Web.config に次のものが必要です。

<modules runAllManagedModulesForAllRequests="true" runManagedModulesForWebDavRequests="true" >
  <remove name="WebDAVModule" />
</modules>

<handlers>
  <remove name="WebDAV" />
</handlers>

ここでの他の回答との重要な違いは、 runManagedModulesForWebDavRequests="true" の必要性です

于 2016-06-17T03:10:04.740 に答える
7

私にとって、これはweb.configでトリックを行います。

<system.webserver>
    <handlers>
          <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" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />

          <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
          <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
<system.webserver/>

<system.web>
  <authentication mode="Windows" />
  <identity impersonate="true"/>
<system.web/>

次の構成を使用しました。

  • IIS7.5
  • Windows Server 2008 R2
  • カスタム アプリケーション プール、.NET 4.0、統合
  • Windows 認証 = true
  • 匿名認証 = false

それが役に立てば幸い。;-)

于 2013-08-13T14:26:45.757 に答える
6

URLScan ツールのユーザー

他の回答がまだ機能せず、404 エラーが発生する場合: URLScanツールがインストールされている場合、これらの動詞はURLScanツールによって明示的に拒否される可能性があります。

必要に応じて、ファイル[AllowVerbs][DenyVerbs]セクションを構成できます。URLScan.ini

これらの動詞を有効にすることによるセキュリティ リスクに注意してください。

于 2014-01-05T16:08:58.930 に答える
5

私にとってうまくいったのは、WebDavを完全にアンインストールすることでした。

于 2014-04-11T17:19:30.123 に答える
4

PUTハンドラー マッピングに入り、すべての動詞を処理するように WebDAV を設定することは、処理された動詞として既にとDELETEがリストされているにもかかわらず、私にとって唯一うまくいった方法です。私が持っている作業中のweb.configは次のとおりです。

  <system.webServer>
    <handlers>     
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="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" />
      <remove name="WebDAV" />
      <add name="WebDAV" path="*" verb="*" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" />
    </handlers>
  </system.webServer>
于 2014-07-16T21:27:37.093 に答える
3

IIS8で試しました。

  • **WebDav パブリッシングをアンインストールする

    アンインストールの手順 -> コントロール パネル -> [プログラムと機能] -> [Windows 機能の有効化または無効化] -> [インターネット インフォメーション サービス] -> [World Wide Web サービス] -> [一般的な HTTP 機能] -> [WebDAV 公開] を選択して、WebDAV オプションのチェックを外します。 **

于 2014-07-09T06:08:56.107 に答える
3

web.config で

<system.webServer>
    <handlers>
        <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
        <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>

IIS 管理 UI を使用して、このグローバルまたはデフォルトの Web サーバーを定義することもできます。

于 2012-07-20T17:21:41.020 に答える