如何防止用户直接访问Deleted操作方法?

时间:2010-12-21 10:09:09

标签: asp.net-mvc asp.net-mvc-2

情境:

单击产品列表的一个产品上的删除超链接将调用/Product/Delete HttpGet操作方法。然后,用户单击确认按钮以调用/Product/Delete HttpPost操作方法,该操作方法又将用户重定向到/Product/Deleted HttpGet操作方法。

我想阻止用户跳过/Product/Delete并直接调用/Product/Deleted

1 个答案:

答案 0 :(得分:4)

在重定向之前将某些内容放入TempData。然后在Deleted操作中验证TempData中是否存在此内容。

[HttpPost]
public ActionResult Delete()
{
    // TODO: Delete
    TempData["deleted"] = true;
    return RedirectToAction("deleted");
}

public ActionResult Deleted()
{
    if(TempData["deleted"] == null)
    {
        throw new HttpException(404, "not found");
    }
    return View();
}

你应该知道这是有代价的。如果用户在浏览/product/deleted动作时按 F5 ,他将获得404.所以基本上你要做的是设计不好,我建议你避免它。