4

调用 DELETE 方法 Web API 未到达服务器。在网上搜索类似的问题后,非对我有用。下面是我的解决方案中的代码简介。

网络接口:

    [AuthorizeService]
    [HttpDelete]
    public HttpResponseMessage Delete(Int32 id)
    {
        String username = User.Identity.Name;
        this._clientDataManager.DeleteRestaurant(id,username);

        return new HttpResponseMessage(HttpStatusCode.OK);
    }

阿贾克斯调用:

$.ajax({
    url: 'localhost:53378/api/RestaurantWebAPI/1135',
    type: "DELETE",
    statusCode: {
        200: function (data) {
            //success
        }
    }, beforeSend: setHeader
});

网络配置:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
    </modules>
    <validation validateIntegratedModeConfiguration="false" />
    <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>

</system.webServer>

感谢任何帮助。

4

1 回答 1

-5

好的让它工作,但不知何故,解决方案让我有点困惑。首先是解决方案,最终将以下内容添加到 WebApiConfig 文件中:

   config.Routes.MapHttpRoute(
       name: "DeleteApi",
       routeTemplate: "api/{controller}/Delete/{id}",
       defaults: new { name = RouteParameter.Optional }
   );

现在,当请求的类型设置为“DELETE”时,这不是 MVC 4 Web API 中的一个功能,用于将请求直接路由到 delete 方法吗?对此事的任何澄清都非常受欢迎。

于 2012-11-06T10:45:25.363 回答