ASP.NET Web API自定义PUT方法不起作用(返回404)

时间:2012-08-25 18:45:16

标签: asp.net-web-api

我正在尝试按照http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api上的说明在我的API中创建自定义PUT方法。

我的API:

public class AlarmStatusController : ApiController
{
    // Other methods here (removed for brevity)

    [HttpPut]
    public void ResetAlarmTimeout(long AlarmID)
    {
        // Do stuff (removed for brevity)
    }
}

我对方法的调用:

$.ajax({
    type: "PUT",
    url: "/api/AlarmStatus/ResetAlarmTimeout",
    data: { AlarmID: alarmID },
    success: AlarmResetSuccess,
    error: AjaxError
});

我的API路由在public static void Register(HttpConfiguration config)中:

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

ajax调用返回404.如果我将API方法和ajax调用更改为GET,那么它可以工作,但这不是RESTful,因为我的GET方法正在修改对象。

1 个答案:

答案 0 :(得分:2)

您使用的是VS2010吗?如果是这样,您可能正在使用Cassini,AFAIK不支持PUT(请参阅相关的Cassini and IISExpress PUT/DELETE Verbs cause 405 Http Code)。 IISExpress与VS2010配合使用,支持PUTDELETE动词等,并具有其他优点,因此我会考虑安装并使用它。