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

Posted

技术标签:

【中文标题】找不到静态图像的控制器路径? asp.net mvc 路由问题?【英文标题】:controller path not found for static images? asp.net mvc routing issue? 【发布时间】: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
        );

谢谢!

【问题讨论】:

你有没有找到解决方案,发布时遇到同样的问题 【参考方案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")%>"  />

【讨论】:

哎呀,回答了一个问题。 -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。

以上是关于找不到静态图像的控制器路径? asp.net mvc 路由问题?的主要内容,如果未能解决你的问题,请参考以下文章

asp.net asp.net application 升级到 asp.net web 解决找不到控件 批量生成.designer文件

ASP.NET MVC 在 Windows Server 2016 上找不到控制器

将静态文件路由到 asp.net mvc 中的新路径

ASP.Net Core“找不到此本地主机页面”HTTP ERROR 404

在 Visual Studio 的 ASP.NET Core + Angular 2 模板上设置图像路径

回发时“找不到指定的 URL”-asp.net windows 身份验证