2010-11-03 24 views
12

Tôi nhận được lỗi sau rất nhiều khi bot của Google đi kèm theo:Tự động ném 404 lỗi khi thiếu các thông số cho asp.net MVC

Từ điển thông số chứa một mục null cho tham số 'id' của loại không thể null 'System.Int32' cho phương thức 'System.Web.Mvc.ActionResult Show (Int32)' in 'someclass'. Tham số tùy chọn phải là loại tham chiếu, loại có thể không có giá trị hoặc được khai báo là tham số tùy chọn.
tên Parameter: thông số

tôi đã tự hỏi nếu nó sẽ có thể có ứng dụng ném 404 thay vì thiếu tham số ngoại lệ trong trường hợp này.

Cảm ơn!

Cập nhật để làm rõ điều tôi muốn là tất cả các trường hợp cho lỗi cụ thể này sẽ gửi lỗi 404 thay vì 500. Tốt hơn là bằng cách viết một trình bao bọc nào đó chỉ phát hiện lỗi này.

Trả lời

5

Những gì bạn đang tìm kiếm là route constraints.

+1

Điều này có nghĩa là tôi sẽ viết các tuyến tùy chỉnh t có cách nào tốt hơn để làm điều đó? – TomHastjarjanto

6
public ActionResult Index(int? id) 
{ 
    if(!id.HasValue()) 
    { 
    throw new HttpException(404, "Are you sure you're in the right place?"); 
    } 
} 
+4

Tác phẩm này hoạt động nhưng bạn phải đặt mã này vào phương thức * mọi * hành động. Không có cách nào tốt hơn để làm điều này tập trung? –

+0

@DrewKhông yea đó là những gì tôi đang suy nghĩ quá. Các tùy chọn khác là để làm int id = 0 và mặc định nó là 0 nếu không có gì được thông qua trong nhưng bạn vẫn cần phải làm kiểm tra trong mọi hành động này cũng áp dụng. –

1

Đó không phải là một bài viết mới, và tôi không thể hứa rằng không có cách nào tốt hơn để làm điều đó trong những gần đây MVC xây dựng, nhưng tôi nghĩ rằng đây là một khả năng khá tốt :)

Tôi tin bạn sẽ có thể viết một mô hình tùy chỉnh, sẽ kiểm tra xem thuộc tính ID có hiện diện hay không, và ném một lỗi 404/từ chối ràng buộc nếu nó không có. Tôi biết nó không nhiều, nhưng nó có thể dẫn bạn theo đúng cách :)

PS Bạn có thể tìm thấy ví dụ về mô hình ví dụ tại đây:
http://weblogs.asp.net/melvynharbour/archive/2008/11/21/mvc-modelbinder-and-localization.aspx

Các vấn đề liên quan