我正在尝试按照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方法正在修改对象。
答案 0 :(得分:2)
您使用的是VS2010吗?如果是这样,您可能正在使用Cassini,AFAIK不支持PUT
(请参阅相关的Cassini and IISExpress PUT/DELETE Verbs cause 405 Http Code)。 IISExpress与VS2010配合使用,支持PUT
和DELETE
动词等,并具有其他优点,因此我会考虑安装并使用它。