一个asp.net-mvc应用程序有一个东西叫做路由表。路由表将特定的URL映射到特定的控制器。一个应用程序只有一个路由表。此路由表在global-asax文件中设置。如果您没有路由表,应用程序将始终给出404错误。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional
} // Parameter defaults
);
}
案例-1。 考虑在应用程序中有Area的情况。但是,您没有在网址中提及区域名称。示例localhost/ControllerName/ActionName。 如果您注意网址,则不存在区域名称。根控制器目录中也没有这样的控制器。该控制器存在于区域中。假设您的应用程序中有以下区域。
现在当你键入的网址:本地主机/测试/索引并回车。现在问题是背景中发生了什么?
让我们添加一个参考RoureDebugger。你可以从这个位置获得Dll。然后,我在global-asax文件的Application_Start Handler中添加了一行代码。
RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);
当我执行应用程序。这给我显示了下面的输出,而不是索引页面响应。
如果你留意上面的截图中,缺省路由是启用这是存在于global-asax文件。这是因为没有约束的默认URL会将Controller定位到应用程序的任何位置。但该视图既不存在于根文件夹视图的目录中,也不存在于共享文件夹视图的目录中。最后你会得到404错误。
我该如何摆脱这个问题?
我在过去遇到过类似的问题,并找到了纠正措施。以下是global-asax文件中的默认路由的新版本。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
var route = routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional
}, // Parameter defaults
new[] { "MvcApplication1.Controllers" }
);
route.DataTokens["UseNamespaceFallback"] = false;
}
在上面的代码中我在路径约束和route.DataTokens["UseNamespaceFallback"] = false;
加入命名空间。完成此操作并使用上述URL后,控制器操作方法将永远不会执行,因为控制器中不存在区域名称。
我也想通了,就当URL不包含区域名称和默认路由不包含命名空间信息的DataTokens一个更重要的信息。下面是截图。当URL不包含区域名称和默认路由不包含命名空间信息
数据令牌信息将不可用。
现在,加入的命名空间,并在网址中添加区域名称按修改后的默认路由后。我们将在屏幕截图中获取DataToken信息,如下所示。
下面是在URL
添加区域名称正如你所看到的区域路线现在开启后RouteData
输出。
希望这会帮助你。谢谢
如果您的意思是计算机如何从'url:'/ Vacancy/AutoCompleteLocations''中找到该操作,请参阅http://msdn.microsoft.com/library/vstudio/system.web.routing.route – jarvanJiang