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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With