0

我有一个 ASP.NET MVC 应用程序。我有一个函数模式,它将被 HTTP POST 和 HTTP DELETE 调用。

尽管 Post 被调用,但 Delete 从未被调用。我确认 IIS 接受 HTTP 删除。任何意见?

路由和控制器:

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);
    {
    }
4

2 回答 2

1

从上面的代码中,我认为任何带有模式的 url{version}/cards/{cardID}都将由“RegisterCard”路由处理,无论动词是什么(发布/删除)。对于“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);
{
}

希望这可以帮助。

于 2013-11-01T21:10:01.967 回答
0

我不确定 HTTP 是否支持删除。无论如何,只需使用 post 进行删除操作。只要您不使用 GET 进行 DELETE 操作,就可以了。这里有一些参考...

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

于 2013-10-31T20:09:20.697 回答