Asp.net mvc 为什么';在这种情况下,是否使用Html.ActionLink默认路由工作?
我对路由有一个相当奇怪的问题 在一年不必担心它的配置之后,回到路由,我使用默认路由并忽略资源的路由:Asp.net mvc 为什么';在这种情况下,是否使用Html.ActionLink默认路由工作?,asp.net-mvc,routing,http-status-code-404,actionlink,Asp.net Mvc,Routing,Http Status Code 404,Actionlink,我对路由有一个相当奇怪的问题 在一年不必担心它的配置之后,回到路由,我使用默认路由并忽略资源的路由: routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
// Route name
"{controller}/{action}/{id}",
// URL with parameters
new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional
});
我有一个rulescoontroller
,它有一个Index
和Lorem
操作,还有一个Index.aspx
,Lorem.aspx
在视图>规则目录中
我在maseter页面上有一个针对规则/索引的ActionLink:
<li><div><%: Html.ActionLink("linkText", "Index", "Rules")%></div></li>
链接被呈现为http://localhost:12345/Rules/
我得到了一个404
当我在URL中键入Index
时,应用程序将其路由到操作
当我将默认路由操作从“Index”
更改为“Lorem”
时,操作链接将呈现为http://localhost:12345/Rules/Index
添加索引
,因为它不再位于默认路由上,并且应用程序将正确路由到索引操作
我已使用,但输入urlhttp://localhost:12345/Rules/
也导致了404的使用
我想我已经涵盖了所有的新手错误,相关的SO问题和基本的RTFM
我假设“规则”在路由中不是任何类型的保留字。
除了更新路线和去除障碍,我还能看什么?确保网站所在目录中没有名为“Rules”的文件夹。在默认配置中,ASP.NET MVC路由将在路由定义之前考虑物理路径。如果定义的路由与网站中物理文件夹的路径相匹配,则路由引擎将被完全绕过 您可以通过将
RouteTable.Routes.RouteExistingFiles
属性更改为false
来禁用到物理路径的路由,但如果执行此操作,并且应用程序具有到物理资源的路径(如图像、脚本、样式表等),则需要使用匹配的IgnoreRoute()定义来适应这些路径。
例如:
RouteTable.Routes.IgnoreRoute(“content/{*pathInfo}”)代码>您是否定义了任何IgnoreRoutes?你是否碰巧在你的网站目录中有一个名为“Rules”的文件夹?我有默认的忽略路径(现在问题中添加了),文件夹上有“yes”;架构师还没有为业务对象创建另一个项目,因此那里有一个“规则”文件夹。我会重新组织和测试。添加此评论作为答案,以防万一。在那里,完成了。我花了很长时间才找到问题!谢谢Nathan,第二段特别有趣和有用。