2012-08-08 39 views
2

我只是想知道用戶可能通過意外查詢請求的情況。假設我有控制器動作Asp.net mvc 3處理意外查詢

public ViewResult Details(int id) 
     { 
      Description description = db.Descriptions.Find(id); 
      return View(description); 
     } 

在瀏覽器中理想的查詢將是/admin/Details?id=1。 如果用戶輸入了id=-1id=a或任何其他意外輸入,該怎麼辦?如何處理這個?

回答

4

要確保數字值,您可以添加id = @"\d+"路由約束,並且僅當請求的id是數字時纔會觸發您的操作,否則將返回http not found;

而在所有其他情況下,您應經常檢查用戶輸入的,是這樣的:

public ActionResult Details(int id) 
{ 
    Description description = db.Descriptions.Find(id); 

    if(description == null) 
    { 
      return new HttpStatusCodeResult(404); 
    } 

    return View(description); 
} 

而且用戶會被告知,他所請求的資源與無效的標識符

+0

它的工作,但我有一個問題。返回類型是「ActionResult」,但是'HttpStatusCodeResult(404)'是一個'CodeResult'類型。 – nebula 2012-08-08 10:12:34

+0

HttpStatusCodeResult繼承自ActionResult,因此代碼將執行時沒有問題。不幸的是,我不明白什麼「CodeResult類型」意味着 – archil 2012-08-08 10:26:40

+0

如果ID錯誤,在路由上添加驗證將阻止即使到達該控制器操作。我不確定這是否正是你想要的,但我寧願在動作中測試ID以顯示適當的錯誤,而不是「頁面未找到」類型錯誤。所以也許在將ID傳遞給你的db.Descriptions.Find()方法之前,你可以測試它是否大於0. – Pluc 2012-08-08 11:22:23