2010-12-21 49 views
0

場景:如何防止用戶直接訪問已刪除的操作方法?

在產品列表中的一個產品單擊刪除超鏈接將調用/Product/Delete HTTPGET操作方法。然後用戶點擊確認按鈕以調用/Product/Delete HttpPost操作方法,該操作方法又將用戶重定向到/Product/Deleted HttpGet操作方法。

我想阻止用戶跳過/Product/Delete並直接調用/Product/Deleted

回答

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

您應該知道,有這樣的代價是值得的。如果用戶按F5,同時瀏覽/product/deleted動作,他將得到404。所以基本上你想要做的是壞設計,我會建議你避免它。

+0

謝謝@Darin Dimitrov。 – xport 2010-12-21 10:13:50

+1

值得指出的是,當您執行導致狀態更改的操作時,應該優先使用POST。從長遠來看,使用這種分離方式會使你受益匪淺。 – 2010-12-21 10:18:54

+0

@Darin,我認爲我們應該在'Deleted()'''返回View()'之前將'TempData [「刪除」]'設置爲'null'以避免多次調用? – xport 2010-12-21 10:20:01