Asp.net-Mvc
ASP.Net MVC - 處理錯誤的 URL 參數
處理建構自己的 URL 並用他們喜歡的任何東西替換我們期望的 ID 的訪問者的最佳方法是什麼?
例如:
但使用者可以輕鬆地將 URL 替換為:
<https://stackoverflow.com/questions/foo>
我考慮過讓每個控制器函式參數 a
String,並Integer.TryParse()在它們上使用 - 如果通過了,那麼我有一個 ID 並且可以繼續,否則我可以將使用者重定向到一個未知/未找到或索引視圖。Stack Overflow 可以很好地處理它,我也想這樣做 - 你是怎麼做的,或者你有什麼建議?
這是一個像你這樣的路線的例子,對數量有限制:
routes.MapRoute( "Question", "questions/{questionID}", new { controller = "StackOverflow", action = "Question" }, new { questionID = @"\d+" } //Regex constraint specifying that it must be a number. );這裡我們設置 questionID 至少有一個數字。這也將阻止任何包含除整數以外的任何 url,並且還可以防止需要可為空的 int。
*注意:*這不考慮大於 Int32 (-2147483647 - +2147483647) 範圍的數字。我將此作為練習留給使用者解決。:)
如果使用者輸入 url “questions/foo”,他們將不會點擊 Question 操作,並通過它,因為它失敗了參數約束。如果需要,您可以在包羅萬象/預設路由中進一步處理它:
routes.MapRoute( "Catchall", "{*catchall}", // This is a wildcard routes new { controller = "Home", action = "Lost" } );這會將使用者發送到 Home 控制器中的 Lost 操作。可以在此處找到有關萬用字元的更多資訊。
**注意:Catchall 應該作為 LAST 路由駐留。**考慮到 ASP.NET MVC 中路由的惰性特性,將其置於鏈的更上方意味著它將處理其下方的所有其他路由。