ASP.NET MVC HTTP Post/ Удалить

У меня есть приложение ASP.NET MVC. У меня есть один шаблон функции, который будет вызываться как с HTTP POST, так и с HTTP DELETE.

Хотя Post называется, Delete никогда не вызывается. Я подтвердил, что IIS принимает HTTP Delete. Любые комментарии?

Маршрут и контроллеры:

routes.MapHttpRoute(
            name: "RegisterCard",
            routeTemplate: "{version}/cards/{cardID}",
            defaults: new { Controller = "MyController", Action = "

           routes.MapHttpRoute(
           name: "UnregisterCard",
           routeTemplate: "{version}/cards/{cardID}",
           defaults: new { Controller = "MyController", Action = "Delete" });                




    [HttpPost]
    public async Task<HttpResponseMessage> Post(string version, string cardID);
    {
    }

    [HttpDelete]
    public async Task<HttpResponseMessage> Delete(string version, string cardID);
    {
    }

2 ответа

Из приведенного выше кода, я думаю, что любой URL с шаблоном {version}/cards/{cardID} будет обрабатываться маршрутом "RegisterCard" независимо от того, что это за глагол (Post/Delete). Для "Удалить" будет выбран маршрут "RegisterCard", тогда, когда [HttpPost] Селектор действий вступает в игру, это приведет к ошибке 404. Если вы видите 404 для "Удалить", вы можете

ONE Добавить ограничение на маршруты

routes.MapHttpRoute(
    name: "RegisterCard",
    routeTemplate: "{version}/cards/{cardID}",
    defaults: new { Controller = "MyController", Action = "Post"},
    constraints: new { httpMethod = new HttpMethodConstraint(new[] { "post" }) }
);

routes.MapHttpRoute(
    name: "UnregisterCard",
    routeTemplate: "{version}/cards/{cardID}",
    defaults: new { Controller = "MyController", Action = "Delete" },
    constraints: new { httpMethod = new HttpMethodConstraint(new[] { "delete" }) }
); 

ИЛИ Составьте единый маршрут, объединяя их вместе с одним ActionName

routes.MapHttpRoute(
    name: "Card",
    routeTemplate: "{version}/cards/{cardID}",
    defaults: new { Controller = "MyController", Action = "HandleCard"}
);

[ActionName("HandleCard")]
[HttpPost]
public async Task<HttpResponseMessage> Post(string version, string cardID);
{
}

[ActionName("HandleCard")]
[HttpDelete]
public async Task<HttpResponseMessage> Delete(string version, string cardID);
{
}

надеюсь это поможет.

Я не уверен, что HTTP поддерживает удаление. Независимо от этого, просто используйте сообщение для вашего действия удаления. Пока вы не используете GET для действия DELETE, все хорошо. Вот некоторая ссылка...

http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/examining-the-details-and-delete-methods

Другие вопросы по тегам