2

これに関する投稿をたくさん見てきましたが、新しい WebAPI の DELETE メソッドが機能せず、Windows 7 32 ビット、IIS 7.5 を使用して 404 を返します。

私はもう試した

  • WebDAV のアンインストール
  • ExtensionlessUrlHandler-Integrated-4.0 ハンドラー (および 32 ビット/64 ビット ハンドラー) に PUT、DELETE、OPTIONS を追加します。
  • すべてのモジュールの実行を許可します。

すべてが役に立たず、すべてが 404 を返します。DELETE タイプを GET に変更すると、サービスは GET コマンドを完全に正常に実行します。

これについて他のアイデアを持っている人はいますか?それは私を夢中にさせています。

編集:

私はこのように DELETE メソッドを呼び出しています (メディエーターは jQuery 呼び出しのラッパーです):

mediator.publish("AjaxCall", {
                url: "/api/files/" + $(a.currentTarget).data("fileid"),
                type: "DELETE",
                }
            });

そして WebAPI:

// DELETE api/<controller>/5
// [HttpDelete] - Tried this too
public void Delete(int fileId)
{
     Files.DeleteFile(fileId);
}

関連する web.config:

<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" />
    </handlers>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="WebDAVModule" />
    </modules>
4

3 に答える 3

2

解決策は、正しい applicationHost.config ファイルに PUT & DELETE 動詞を追加することです。

IIS の場合:

C:\Windows\System32\inetsrv\config に移動し、applicationHost.config ファイルを次のように編集します。

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

IIS EXPRESS の場合、 %userprofile%\documents\iisexpress\config\ に移動し、applicationHost.config ファイルで同じことを行います。

于 2014-04-12T07:17:46.707 に答える
0

「既定の Web サイト」でホストしていますか? はいの場合は、別のポートで個別にホストしてみてください。

PUT と DELETE にも同じ問題があり、回避策は成功しました。

于 2012-09-07T09:07:39.467 に答える
0

属性ルーティングを使用している場合は、AcceptVerbsを次のように DELETE および PUT メソッドで更新します。

[Route("{fileId:int}")]
[AcceptVerbs("DELETE")]
public void Delete(int fileId)
{
   Files.DeleteFile(fileId);
}

また、パラメーター名としてfileIdを記述している場合は、webAPI ルート構成をapi/files/{fileId}に更新することを忘れないでください。

また、GET と PUT にもAcceptVerbs属性を使用します。これは、これら 3 つのメソッドを呼び出す URL 構造が同じであるためです。また、以下のように RoutePrefix を使用して Controller を更新します。

[RoutePrefix("api/files")]
public class FileController : ApiController
{
}
于 2015-08-14T05:35:44.373 に答える