2014-09-02 12 views
0

我知道有大量的人得到這個錯誤,但大多數都使用內置的id功能,其中我不是。超出了我讀過關於這個網站,我需要展示一個友好的錯誤,而不是建立在死亡黃屏:如何捕捉「空條目的參數」錯誤

參數字典包含參數「產品ID」非空的 無效項類型 'System.Int32'

我的網址...

/myController的/ MyView的?人= 789 &的productId = 123

...其中productId實際上應該包含整數值。儘管我在方法中檢查了它是null,但MVC在執行檢查之前會拋出異常。

是否可以通過捕獲這個錯誤並提供錯誤視圖?

我知道我可以設置變量類型爲Int32?,但這看起來像一個黑客,因爲方法確實需要值。

public ActionResult Show(string person, Int32 productId) 
{ 
    if (productId== null) // exception occurs before this point, so this check fails 
    { 
     return View("Error", new ErrorViewModel { Summary = "No value provided" }); 
    } 
// .... 
} 
+1

請注意,Int32永遠不能爲空。所以你的支票是無效的。你真的需要int嗎?做一個空檢查。因此這不是真正的必要。 – 2014-09-02 15:42:08

+0

但是有沒有其他的方法來檢查參數值是否在URL中提供?動作鏈接總是創造一個價值,但我試圖阻止人們搞亂網址。 – EvilDr 2014-09-02 15:47:01

+3

錯誤本身就是「阻止人們使用URL」的方法。試圖捕捉用戶可能試圖做的每件事都是傻瓜的差事。如果他們弄亂了這個URL,他們會得到一個500.這沒什麼錯。 – 2014-09-02 15:54:17

回答

0

你的問題混在一起,這是你應該如何編寫你的行動:

public ActionResult Show(string person, Int32? productId) 
{ 
    if (productId.HasValue == false) // exception occurs before this point, so this check fails 
    { 
    return View("Error", new ErrorViewModel { Summary = "No value provided" }); 
    } 
    // .... 
} 

切勿將產品ID在你發佈的代碼無效,因爲沒有方法簽名都不能匹配查詢字符串沒有productId在裏面。現在可以空productId你的代碼是有道理的。