2010-03-25 37 views
13

Tôi có một thư mục hình ảnh được lưu trữ tại ~/Content/Images/cho hình ảnh tĩnh? vấn đề định tuyến asp.net mvc?

Tôi tải những hình ảnh này qua

<img src="/Content/Images/Image.png" /> 

Gần đây, hình ảnh không tải và tôi nhận được các lỗi sau đây do lỗi của tôi đăng nhập. Điều kỳ lạ là một số hình ảnh tải tốt, trong khi những hình ảnh khác không tải.

Bất kỳ ai có bất kỳ ý tưởng nào là sai với các tuyến đường của tôi? Tôi có thiếu một tuyến đường bỏ qua cho/Nội dung/thư mục không?

Tôi cũng nhận được lỗi tương tự cho favicon.ico và một loạt các tập tin hình ảnh khác ...

<Fatal> -- 3/25/2010 2:32:38 AM -- System.Web.HttpException: The controller for path '/Content/Images/box_bottom.png' could not be found or it does not implement IController. 
at System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(Type controllerType) 
at System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) 
at System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext) 
at System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext) 
at System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext) 
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

tuyến đường hiện tại của tôi trông như thế này:

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

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

     routes.MapRoute(
      "ControllerDefault",            // Route name 
      "{controller}/project/{projectid}/{action}/{searchid}",       // URL with parameters 
      new { controller = "Listen", action = "Index", searchid = "" } // Parameter defaults 
     ); 

Cảm ơn!

+0

Bạn đã bao giờ tìm thấy một giải pháp, có prob cùng khi xuất bản – Stefanvds

Trả lời

5

Tôi sẽ chèn một tuyến đường bị bỏ qua khác ngay bên dưới tuyến đường đầu tiên.

routes.IgnoreRoute("Content/Images/{*pathInfo}"); 
+0

Tôi sẽ cố gắng này ... nhưng prob chỉ xảy ra trên dàn dựng (không phải dev) vì vậy sẽ không được cho đến khi tomm mà tôi có thể kiểm tra. – rksprst

+0

Bạn đã thử điều đó chưa? –

+0

Có, vẫn còn lỗi tương tự. – rksprst

0

Bạn không có routes.RouteExistingFiles = true; ở đâu đó?

+0

Không, tôi không có ở đâu cả. – rksprst

3

Nếu bạn nhìn vào chế độ xem trình khám phá giải pháp của mình, tôi đoán rằng thư mục Nội dung của bạn nằm trong thư mục gốc của dự án cùng với thư mục cho Bộ điều khiển và Chế độ xem. Cố gắng sửa đổi src hình ảnh của bạn như hình dưới đây ...

<img src="../../Content/Images/Image.png" /> 
+1

Điều đó không hiệu quả đối với tôi ... Tôi cần sử dụng đường dẫn gốc (/ Content/Images) vì những hình ảnh đó được tham chiếu trong các tệp css độc lập trong dev và được rút gọn và kết hợp trong sản xuất (do đó mất vị trí tương đối)). Nhưng tại sao điều này sẽ giúp đỡ? – rksprst

+0

@rksprst: Tôi đã có cùng một vấn đề và giải quyết nó như thế này. Ngay bây giờ '/ Nội dung/Hình ảnh/Hình ảnh.png' sẽ xem trong thư mục action views của bạn cho ảnh ... Nó không được kéo từ thư mục '~/Content/Images /'. – RSolberg

1

Bạn cần phải khai báo các tuyến đường ít cụ thể để phía dưới:

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

routes.MapRoute(
    "ControllerDefault", 
    "{controller}/project/{projectid}/{action}/{searchid}", 
    new { controller = "Listen", action = "Index", searchid = "" } 
); 

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = "" } 
); 

Nhưng tôi không nghĩ rằng đây là vấn đề ở đây. Từ ngoại lệ, có vẻ như máy chủ web thực thi ứng dụng này có ánh xạ ký tự đại diện với bộ lọc aspnet_isapi có nghĩa là tất cả các tệp sẽ được liên kết với thời gian chạy ASP.NET ngay cả các tệp tĩnh.

+0

Vâng, bạn có thể thực hiện mẹo nhỏ đó trong IIS, nơi bạn giả mạo thư mục Nội dung lần đầu tiên làm thư mục ảo, xóa ánh xạ thẻ hoang dã, sau đó xóa thư mục Nội dung dưới dạng thư mục ảo. Điều này sẽ giải quyết vấn đề. – David

2
<img src="<%= Url.Content("~/Content/Images/Image.png")%>" alt="does this work?" /> 
+1

oops, đã trả lời bằng một câu hỏi. -1 – ScottG

0

Ngoại lệ ... could not be found or it does not implement IController không phải là lỗi. Trên thực tế, /favicon.ico không giải quyết được với bộ điều khiển sao cho điều này có nghĩa là mô-đun tiếp theo (hoặc là nó xử lý?) Nên cố gắng xử lý yêu cầu. Vì vậy, trong một cách nó là một "ngoại lệ dự kiến".

Vấn đề là khi ngoại lệ này được ghi lại và làm tắc nhật ký. Khi sử dụng log4net, thêm <filter> yếu tố sau đây để appender mặc định nên giữ nó ra:

<filter type="log4net.Filter.StringMatchFilter"> 
    <regexToMatch value="System.Web.HttpException \(0x80004005\): The controller for path '[^']*' was not found or does not implement IController\." /> 
    <acceptOnMatch value="false" /> 
</filter> 
Các vấn đề liên quan