【问题标题】:controller path not found for static images? asp.net mvc routing issue?找不到静态图像的控制器路径? asp.net mvc 路由问题?
【发布时间】:2011-01-31 13:36:44
【问题描述】:

我有一个图像文件夹存储在 ~/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
        );

谢谢!

【问题讨论】:

  • 你有没有找到解决方案,发布时遇到同样的问题

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


【解决方案1】:

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

问题是何时记录此异常并阻塞日志。使用 log4net 时,将以下 &lt;filter&gt; 元素添加到默认附加程序应将其排除在外:

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

【讨论】:

    【解决方案2】:
    <img src="<%= Url.Content("~/Content/Images/Image.png")%>" alt="does this work?" />
    

    【讨论】:

    • 哎呀,回答了一个问题。 -1
    【解决方案3】:

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

    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 运行时相关联,即使是静态文件。

    【讨论】:

    • 是的,您可以在 IIS 中执行这个小技巧,首先将 Content 文件夹伪装成虚拟目录,删除通配符映射,然后将 Content 文件夹作为虚拟目录删除。这应该可以解决问题。
    【解决方案4】:

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

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

    【讨论】:

    • 这对我不起作用...我需要使用根路径 (/Content/Images),因为这些图像在开发中独立的 css 文件中被引用,并且被缩小和组合在生产中(从而失去相对位置)。但是为什么这会有帮助呢?
    • @rksprst:我遇到了同样的问题,并像这样解决了它。现在/Content/Images/Image.png 将在您的视图操作文件夹中查找图像...它不是从~/Content/Images/ 文件夹中提取的。
    【解决方案5】:

    你没有routes.RouteExistingFiles = true;吗?

    【讨论】:

    • 不,我没有那个。
    【解决方案6】:

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

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

    【讨论】:

    • 我要试试这个……但问题只发生在 staging(而不是 dev)上,所以直到我可以测试 tomm。
    猜你喜欢
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多