0
点赞
收藏
分享

微信扫一扫

.net webform和MVC混合项目的路由问题


背景:

  1. 原webform项目
  2. 种种原因,加上了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.

分析:

做了各种尝试之后发现无效,猜测是不是路由混用的问题。
一试,果然是。

验证步骤

  1. 在​​Global.asax​​文件里不启用mvc路由,访问根目录
  2. 访问正常,说明就是两者路由的混合问题。
  3. 分析,是 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" }
);

亲测成功。

编程多年,慢慢觉得有些问题自己思考和解决的思路总是很对~~~


举报

相关推荐

0 条评论