Reputation: 1892
I am trying to create a custom PUT method in my API, following the instructions at http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api.
My API:
public class AlarmStatusController : ApiController
{
// Other methods here (removed for brevity)
[HttpPut]
public void ResetAlarmTimeout(long AlarmID)
{
// Do stuff (removed for brevity)
}
}
My call to the method:
$.ajax({
type: "PUT",
url: "/api/AlarmStatus/ResetAlarmTimeout",
data: { AlarmID: alarmID },
success: AlarmResetSuccess,
error: AjaxError
});
My API route in public static void Register(HttpConfiguration config):
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { action = RouteParameter.Optional, id = RouteParameter.Optional }
);
The ajax call returns 404. If I change the API method and ajax call to a GET, then it works, but this isn't RESTful since my GET method is modifying the object.
Upvotes: 3
Views: 1425
Reputation: 7141
Are you using VS2010? If so you're probably using Cassini, which AFAIK doesn't support PUT
(see related Cassini and IISExpress PUT/DELETE Verbs cause 405 Http Code). IISExpress works well with VS2010, supports the PUT
and DELETE
verbs, etc. and has other advantages, so I'd consider installing that and using it.
Upvotes: 2