找不到静态图像的控制器路径? 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 时,将以下 <filter>
元素添加到默认附加程序应将其排除在外:
<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 Core“找不到此本地主机页面”HTTP ERROR 404