3

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.

4

1 に答える 1

2

VS2010を使用していますか?もしそうなら、おそらく AFAIK がサポートしていない Cassini を使用していますPUT(関連するCassini と IISExpress PUT/DELETE Verbs cause 405 Http Codeを参照してください)。IISExpress は VS2010 でうまく動作し、動詞PUTDELETE動詞などをサポートし、その他にも利点があるため、インストールして使用することを検討します。

于 2012-08-25T19:30:32.997 に答える