【问题标题】:ASP.NET MVC HTTP Post/DeleteASP.NET MVC HTTP 发布/删除
【发布时间】:2013-10-31 14:09:57
【问题描述】:

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

虽然 Post 被调用,但 Delete 永远不会被调用。我确认 IIS 接受 HTTP 删除。有cmets吗?

路由和控制器:

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

【问题讨论】:

  • 您使用的是哪种浏览器? IE 8 和 9 不能很好地执行 AJAX DELETE/PUT。尝试在请求中添加“X-HTTP-Method-Override: Delete”标头并使用 POST。这会触发动作吗?
  • 检查这个答案并检查你的配置文件stackoverflow.com/questions/10906411/…

标签: asp.net-mvc asp.net-mvc-routing http-delete


【解决方案1】:

从上面的代码中,我认为任何带有{version}/cards/{cardID} 模式的网址都将由“RegisterCard”路由处理,无论动词是什么(发布/删除)。对于“Delete”,会选择“RegisterCard”路由,然后当[HttpPost]动作选择器起作用时,会导致404错误。如果您遇到“删除”的 404,您可能会

一个 为路由添加约束

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

希望这会有所帮助。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 2015-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多