【问题标题】:MapPageRoute fails to redirect to specified aspx pageMapPageRoute 无法重定向到指定的 aspx 页面
【发布时间】:2021-04-06 21:13:57
【问题描述】:

我的 RouteConfig.cs 文件中有以下内容

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

            // route default URL to index.aspx
            routes.MapPageRoute(
                routeName: "LoginPageRoute",
                routeUrl: "login",
                physicalFile: "~/Login.aspx"
            );

            routes.MapPageRoute("LoginPageRoute2", "login2", "~/Login.aspx");


        }

但是,如果我尝试使用“login”或“login2”访问我的 WebApp,我会收到资源找不到错误消息。

  • http://localhost:4200/login2 - 失败
  • http://localhost:4200/login - 失败
  • http://localhost:4200/Login.aspx - 加载正常

我的 Global.asax 有以下内容

 protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }

【问题讨论】:

  • 你确认你的方法被击中了吗?设置断点或添加日志记录?
  • @mason 是的,我通过 Visual Studio 在调试中运行了我的项目,并验证了 Application_Start() 和 RegisterRoutes() 已被调用。我对 aspx 和路由映射有点陌生,所以我不确定如何调试流程以尝试访问“/login”。网页只是直接进入 404 错误,并没有达到我的任何调试点。
  • 您是否尝试过重新排列映射页面路由的顺序?也许在映射默认 MVC 路由之前映射它们?
  • @mason :D 所以我刚刚找到另一篇文章,展示了如何跟踪路由表查找,我注意到我没有得到正确的路由。然后我看到了你的评论,所以我把我的路线移到了顶部……和……魔法。它现在正在工作。谢谢!

标签: asp.net maproute


【解决方案1】:

有人在我的问题下发表的评论引导我找到解决方案,即将我的自定义路由移动到默认路由之前。

将以下内容添加到 Global.asax 有助于证明这确实是问题所在。


        public override void Init()
        {
            base.Init();
            this.AcquireRequestState += showRouteValues;
        }

        protected void showRouteValues(object sender, EventArgs e)
        {
            var context = HttpContext.Current;
            if (context == null)
                return;
            var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(context));
        }

设置断点

var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(context));

表明我的“登录”映射使用的是默认路由映射,而不是我的自定义路由映射。

再次感谢@mason!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 2014-09-11
    • 2012-06-18
    • 1970-01-01
    相关资源
    最近更新 更多