静态图像找不到控制器路径? asp.net mvc路由问题?

时间:2010-03-25 04:26:10

标签: c# asp.net asp.net-mvc routing asp.net-mvc-routing

我有一个存储在〜/ Content / Images /

的图像文件夹

我正在通过

加载这些图片
<img src="/Content/Images/Image.png" />

最近,图片未加载,我的错误日志中出现以下错误。奇怪的是,有些图像加载正常,而其他图像无法加载。

任何人都知道我的路线有什么问题?我错过了/ Content /文件夹的忽略路线吗?

我也为favicon.ico和其他一些图像文件得到了同样的错误......

<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)

我目前的路线如下:

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
        );

谢谢!

6 个答案:

答案 0 :(得分:5)

我会在第一个下面插入另一个被忽略的路线。

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

答案 1 :(得分:3)

如果查看解决方案资源管理器视图,我猜测您的内容文件夹位于项目的根目录中,还有控制器和视图的文件夹。尝试修改图像src,如下所示......

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

您需要向底部声明不太具体的路线:

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 = "" }
);

但我认为这不是问题所在。从例外情况来看,执行此应用程序的Web服务器似乎具有带有aspnet_isapi过滤器的通配符映射,这意味着所有文件都将与ASP.NET运行时甚至静态文件相关联。

答案 4 :(得分:0)

你某处没有routes.RouteExistingFiles = true;吗?

答案 5 :(得分:0)

异常... could not be found or it does not implement IController不一定是错误的。实际上/favicon.ico没有解析到控制器,所以这意味着下一个模块(或它是处理程序?)应该尝试处理请求。所以在某种程度上它是一个预期的异常&#34;。

问题是当记录此异常并阻塞日志时。使用log4net时,将以下<filter>元素添加到默认的appender应该保留它:

<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>