2009-07-01 28 views
7

Tôi đang gặp vấn đề phức tạp (hãy nhớ với tôi là MVC mới) bằng cách sử dụng bộ điều khiển (và sau đó là tuyến) với tên PropertiesController .Định tuyến ASP.NET MVC với bộ điều khiển có tên "PropertiesController"

Tôi tin rằng điều này là do có một thư mục (mà tôi không thể thực sự loại bỏ) được gọi là "Properties" trong giải pháp của tôi. Có một vòng theo cách này?

Các thiết lập tuyến đường chỉ là một đơn giản tuyến đường:

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Properties", action = "List", id = "" } // Parameter defaults 
); 

và lỗi tôi nhận được trong IIS7 khi yêu cầu "http://localhost/aptment2/properties/" là:

alt text

Chắc chắn có một cách vòng này mà tôi không thể tìm thấy? Chúc mừng.

+0

Bạn đang cố gắng duyệt trực tiếp đến chế độ xem đó hay bạn đang đi qua trang default.aspx trước (chẳng hạn như với F5 hoặc Ctrl + F5)? Chỉ cần tò mò nếu đăng ký tuyến đường là nhận được bỏ qua xảy ra f bạn có mà xem thiết lập như là trang bắt đầu thay vì default.aspx. – nkirkes

+0

chỉ cần đốt cháy 2 giờ cố gắng để gỡ lỗi này, phải nhớ SO của mình lần đầu tiên tiếp theo – mxmissile

+0

Điều gì thậm chí còn sai lầm hơn là url 'tài sản/chỉ mục 'hoạt động. – mxmissile

Trả lời

4

Kể từ khi ai đó đang gặp vấn đề tương tự, tôi đoán rằng bạn đang chạy vào một từ khóa dành riêng ở đây (tôi tưởng tượng ClassControllers là ra là tốt).

Đây không phải là lần đầu tiên nó xảy ra - đào sâu hơn vào bên trong của môi trường, you can't route to Windows' reserved keywords either.

2

Chạy thử nghiệm nhanh, tôi nhận được cùng một hành vi. Nó có phải là một lựa chọn khả thi để sử dụng một cái gì đó khác hơn là thuộc tính?

+0

Tôi không muốn nếu có thể, sau khi tất cả ý tưởng của MVC là bạn có toàn quyền kiểm soát và lược đồ đặt tên URL của bạn phải càng sạch càng tốt! –

+0

Vâng, sắp xếp. Đó là ý tưởng đằng sau việc định tuyến, không nhất thiết chỉ là MVC, nhưng không phân biệt, MVC dựa trên các quy ước nhất định và bao gồm không sử dụng các từ dành riêng hoặc tên của các tài nguyên khác. Tôi sẽ đề nghị hoặc xem xét khóa xuống định nghĩa tuyến đường hơn nữa (tôi sẽ thêm một chỉnh sửa với một gợi ý) hoặc đến với một tên khác nhau cho bộ điều khiển của bạn. – nkirkes

+0

Tôi đã thử khóa tuyến đường xa hơn một chút và nhận được kết quả tương tự. Bạn có thể là SOL về điều này nhưng tôi sẽ tò mò để xem nếu có một cách xung quanh nó. – nkirkes

0

Tôi không biết đó có phải là tùy chọn cho bạn hay không, nhưng bạn có thể thử tắt định tuyến cho các tệp hiện có.

routes.RouteExistingFiles = false; 
4

Tôi có thiết lập PropertiesController trên ứng dụng MVC 3 được định cấu hình để sử dụng IIS Express. Tôi không nhận được lỗi chính xác mà bạn làm, nhưng nó là tương tự (404.20 không có tài liệu mặc định) và tôi chắc chắn nó là vì lý do tương tự.

Nó không gây ra vấn đề gì trong môi trường sản xuất của chúng tôi vì chúng tôi xuất bản bản dựng ứng dụng đã biên dịch và sau đó nó không có thư mục Thuộc tính.

Để khắc phục sự cố khi phát triển cục bộ, tôi có tất cả nội dung tĩnh (scripts/css/etc ...) trong một thư mục và tôi bỏ qua nó khi bật RouteExistingFiles.

routes.IgnoreRoute("static/{*wildcard}"); 
    routes.RouteExistingFiles = true; 

Điều này đã khắc phục sự cố của tôi và bây giờ tôi có thể duyệt example.com/properties/ lỗi miễn phí.

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