代码之家  ›  专栏  ›  技术社区  ›  the_drow

如果客户端不提供,如何自动重载删除和放置?

  •  2
  • the_drow  · 技术社区  · 15 年前

    如何在应用程序启动时检测到客户端不支持 DELETE PUT
    在服务器端,如何将那些重载的POST动词重定向到正确的操作中?
    假设我有一个被重写的删除请求,我如何在控制器中调用与操作匹配的相应函数?
    我的猜测是,我应该使用一些操作过滤器并使用反射来检查与我的函数匹配的属性(在本例中: DeleteFoo(Guid Id) ).

    1 回复  |  直到 15 年前
        1
  •  5
  •   Darin Dimitrov    15 年前

    您无法检测客户端是否支持这些动词。也适用于不支持 PUT DELETE html表单中的动词可以使用 HttpMethodOverride POST

    <% using (Html.BeginForm("Destroy", "Products", new { id = "123" }, FormMethod.Post)) { %>
        <%: Html.HttpMethodOverride(HttpVerbs.Delete) %>
        <input type="submit" value="Delete" />
    <% } %>
    

    它将调用 [HttpDelete]

    [HttpDelete]
    public ActionResult Destroy(int id)
    {
        // TODO: delete product
        TempData["message"] = "product deleted";
        return RedirectToAction("index");    
    }
    

    这里重要的是,控制器不应该关心或依赖于客户端支持的动词。如果您使用正确的动词和名称以RESTful方式设计控制器,那么这里所示的一些技术允许不支持 投入 仍然调用这些操作的动词。

    推荐文章