背景:
- 原webform项目
- 种种原因,加上了MVC路由,因此也就有了
Global.asax
文件里的 注册路由时的代码变化:
void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
RouteConfig.RegisterRoutes(RouteTable.Routes);
//mvc路由
MvcRouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
public class MvcRouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
}
}
表现:
网站首页不能访问,总是404,任何设置,或IIS设置,重定向啥玩意都不顶用。
如: debug.www.mysite.com ,永远404.
分析:
做了各种尝试之后发现无效,猜测是不是路由混用的问题。
一试,果然是。
验证步骤
- 在
Global.asax
文件里不启用mvc路由,访问根目录 - 访问正常,说明就是两者路由的混合问题。
- 分析,是 mvc 路由的默认设置造成的。如下
routes.MapRoute(
name: "Default",
url: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
由于 路由注册顺序的原因,根目录将会被指引到去访问 /Home/Index
,而显然不存在。
将defaults 指定为其他存在的路由即可。
如下:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
亲测成功。
编程多年,慢慢觉得有些问题自己思考和解决的思路总是很对~~~