web-dev-qa-db-ja.com

IISでASP.NET MVCのHTTP PUTおよびDELETEを有効にするにはどうすればよいですか?

ASP.NET MVC3アプリケーションでHTTP PUTDELETEを使用しています。ローカルで実行すると、すべてが正常に機能します。しかし、アプリケーションをサーバーに公開すると、これらのメソッドは機能しません。

WebサーバーがPUTおよびDELETE要求をサポートできるようにするための特別な設定はありますか? IIS 7.5。で共有ホスティングを使用しています。

更新:

IIS managerPUTおよびDELETEリクエストを有効にします。 PUTコマンドは正常に機能します。しかし、DELETEはまだ機能しません。 jQueryでリクエストを作成します:

私はこのページにいます:

http://domain.com/dashboard/edit-site/103323/links/

私のajaxコールは次のとおりです:

$.ajax({
    // url: same as page-url,
    cache: false,
    type: 'DELETE',
    data: { linkid: $(link).data("linkid") },
    beforeSend: function () {
        // doing something in UI
    },
    complete: function () {
        // doing something in UI
    },
    success: function (data) {
        // doing something in UI
    },
    error: function () {
        // doing something in UI
    }
});

これにより、次のようなリクエストが作成されます。

Accept: */*
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://domain.com
Referer: http://domain.com/dashboard/edit-site/103323/links/
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
X-Requested-With: XMLHttpRequest

これでForm Data

linkid:104044
53
agent47

IIS ManagerHandler Mappingsに移動します。見つける ExtensionlessUrlHandler-Integrated-4.0、ダブルクリックします。 Request Restrictions ...ボタンをクリックし、VerbsタブでDELETEPUTの両方を追加します。 enter image description here


編集:WebDav Publisherの問題の可能性

2008年のサーバーで実行していた削除済みの投稿に言及しましたか? webDavロールを削除するか、サイトから無効にしますconfig:on system.webServer-> modulesセクション、WebDAVModuleモジュールの削除:

<system.webServer>
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
  </handlers>
</system.webServer>
78
danielQ

PUTまたはDELETEのasp.net Web APIの運用環境で次のエラーが発生する場合、これらのメソッドはローカルで正常に機能しています。

405-このページへのアクセスに使用されるhttp動詞は許可されていません。

サーバーのweb.configに次の設定を追加するだけです

<system.webServer>
    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <modules>
        <remove name="WebDAVModule" />
    </modules>
</system.webServer>

原因: webDAV モジュールはデフォルトでPUT/DELETEメソッドをブロックします。したがって、最初にこのモジュールとそのハンドラーを削除してください。最初に、既存のExtensionlessUrlHandler-Integrated-4.0設定を削除し、目的のpathおよびverbsとともに追加します。

37
Heera Jaiswal

次のコード行をweb.configに追加するだけです。

<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>

そして

<modules>
    <remove name="WebDAVModule" />
</modules>
<handlers>
    <remove name="WebDAV" />
</handlers>
9
Adeel Asghar

最後に、私は答えが不安定であることを見つけました。以下のjQuery呼び出しをthoに変更しましたが、今はうまく機能しています。

$.ajax({ 
    url: this.href + "?linkid=" + $(link).data("linkid"), 
    cache: false, 
    type: 'DELETE', 
    // data: { linkid: $(link).data("linkid") }, 
    beforeSend: function () { 
        // doing something in UI 
    }, 
    complete: function () { 
        // doing something in UI 
    }, 
    success: function (data) { 
        // doing something in UI 
    }, 
    error: function () { 
        // doing something in UI 
    } 
});

DELETE呼び出しが、Form Data?ローカルにいる間、それはうまく機能しましたか?

2
agent47