2010-01-21 25 views
52

Tôi gặp lỗi lạ trên máy chủ web của mình cho mọi tệp nhưng tệp .aspx.Tôi nhận được lỗi "Không triển khai IController" trên hình ảnh và robots.txt trong MVC2

Đây là một ví dụ. Chỉ cần thay thế '/robots.txt' với bất kỳ tên .jpg hoặc .gif hoặc bất cứ điều gì và bạn sẽ nhận được các ý tưởng:

Bộ điều khiển cho path '/robots.txt' đã không tìm thấy hoặc không thực hiện Bộ điều khiển.

Tôi chắc chắn đó là điều cần làm với cách tôi đã thiết lập định tuyến nhưng tôi không chắc mình cần phải làm gì chính xác.

Ngoài ra, đây là trang web MVC và WebForms hỗn hợp, nếu điều đó tạo nên sự khác biệt.

+0

Bạn đang sử dụng tùy chỉnh 'IControllerFactory'? –

+0

Nếu bạn đang sử dụng một IControllerFactory, thì những gì sau đó @ DanielA.WhiteZ? – Zac

+0

Âm thanh như một vấn đề với trình xử lý đối với các tệp tĩnh. Chỉ cần nói. –

Trả lời

72

Bạn có thể bỏ qua robots.txt và tất cả các trang aspx trong định tuyến của mình.

routes.IgnoreRoute("{*allaspx}", new {[email protected]".*\.aspx(/.*)?"}); 
routes.IgnoreRoute("{*robotstxt}", new {[email protected]"(.*/)?robots.txt(/.*)?"}); 

Bạn cũng có thể bỏ qua favicon.

routes.IgnoreRoute("{*favicon}", new {[email protected]"(.*/)?favicon.ico(/.*)?"}); 

Bạn có thể điều chỉnh biểu thức chính quy để loại trừ đường dẫn.

Haacked from the source.

+0

Tôi thích giải pháp này, nó hút tôi sẽ phải thêm một cho mỗi loại tập tin mặc dù. .jpg, .png, .gif, .swf, .pdf, v.v. –

+0

@blesh - bạn có đang sử dụng 'IControllerFactory' tùy chỉnh không? –

+0

Không ... nhưng nhìn vào nó, tôi nghĩ rằng tôi có thể bắt đầu. Tại sao bạn hỏi? –

2

tôi thấy another solution quá ... Trong khi tôi không nghĩ rằng tôi sẽ sử dụng nó, nó có giá trị thể hiện ở đây trong câu trả lời:

Sau đây nên (về mặt lý thuyết) bỏ qua tìm kiếm các bộ điều khiển cho bất cứ điều gì với một '.' trong đó.

routes.MapRoute(
    "Default",            // Route name 
    "{controller}/{action}/{id}",       // URL with parameters 
    new { controller = "Home", action = "Index", id = "" }, // Parameter defaults 
    new { controller = @"[^\.]*" }       // Parameter contraints. 
); 
2

Bạn vẫn có:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

... trong Global.asax.cs của bạn?

MVC đặt nó ở đó theo mặc định và nó được cho là để xử lý việc này.

Nếu có, thì vấn đề có thể là cách bạn đang trộn MVC và WebForms.

+2

Và chắc chắn rằng nó là ở đầu trang! – Martin

+0

Tôi có nó ... nhưng nó ở dưới 'routes.IgnoreRoute (" {resource} .aspx/{* pathInfo} ");' là một vấn đề? –

+0

Không phải là một vấn đề. –

6

Lỗi này cũng có thể xảy ra nếu bên trong một chế độ xem trong khu vực của bạn, bạn sử dụng trình trợ giúp Html.Action. Người trợ giúp này sẽ luôn sử dụng khu vực này làm phần phụ, trừ khi bạn nói cụ thể là không. Ví dụ:

@Html.Action("Main", "Navigation", new { area = string.Empty }) 
+0

Câu trả lời của bạn đã giải quyết được vấn đề khác của tôi liên quan đến @ Html.Action – irfandar

15

Tuyến bỏ qua đưa ra ở trên không làm việc cho tôi, nhưng tôi thấy một tương tự mà đã làm:

routes.IgnoreRoute("{*staticfile}", new { staticfile = @".*\.(css|js|gif|jpg)(/.*)?" }); 
0

tôi gặp phải lỗi này khi tôi yêu cầu nguồn lực mà không tồn tại.

Cụ thể, tôi đã được yêu cầu tùy chỉnh IE css file:

<!--[if lt IE 8]>@Styles.Render("~/Content/ie7.css")<![endif]-->

(Đây là những condition comments, giải thích bằng IE)

Tuy nhiên, tài nguyên thực tế tồn tại trên ~/Nội dung/ie/ie7.css.

Vì vậy, không có bất kỳ sửa đổi nào đối với định tuyến, lỗi được giải quyết bằng cách sử dụng đúng url của tài nguyên.

+1

Ngoài sự tò mò, tại sao lại bận tâm với nhận xét về điều kiện nếu bạn có thể phát hiện phiên bản trình duyệt ở phía máy chủ @block và không hiển thị thêm kiểu nào? – mikeschuld

+0

Vâng, thực sự tôi không bao giờ làm phiền. Các css và hầu hết các đánh dấu là công việc của một đồng đội. Tôi cho rằng đó chỉ là kết quả của mong muốn của một nhà thiết kế phía trước để giữ mọi thứ được kiểm soát. Kích hoạt bởi nhận xét của bạn, tôi chỉ đọc trên [MSDN - Về bình luận có điều kiện] (https://msdn.microsoft.com/en-us/library/ms537512%28v=vs.85%29.aspx) hỗ trợ đã bị loại bỏ trong chế độ tiêu chuẩn IE10, vì vậy, chúng ta sẽ phải xem xét điều này. –

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