【问题标题】:URL Routing C# mvc and Web FormsURL 路由 C# mvc 和 Web 表单
【发布时间】:2013-04-09 04:52:37
【问题描述】:

所以我有一个 webforms 和一个 mvc 应用程序组合,并试图让事情正确路由。我的默认路由按预期工作,但是当我在其中一个视图中单击操作链接时,它没有路由到正确的页面。

这是我的路由代码。

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

           routes.MapPageRoute("",
               "", "~/Default.aspx", true);

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



        }


        void Application_Start(object sender, EventArgs e)
        {
            // Code that runs on application startup

           AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterAuth();

        }

这是我要点击的操作链接:@Html.ActionLink("Properties Editor", "Index", "Property")

这是我的预期结果:urlgoeshere.com/Property/Index

这是我的实际结果:urlgoeshere.com/?action=Index&controller=Property

我不确定要改变什么来纠正这种情况?有什么想法吗?

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-routing webforms


    【解决方案1】:

    我最终不得不添加一个路由约束。这就是我最终要做的。

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
              routes.MapPageRoute("",
                   "", "~/Default.aspx", true, null, new RouteValueDictionary { { "outgoing", new PageConstraint() } });
    
    
                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Chips", action = "Index", id = UrlParameter.Optional }
                );
    

    还有页面约束。

    public class PageConstraint : IRouteConstraint
        {
            public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
            {
                if (routeDirection == RouteDirection.IncomingRequest)
                    return true;
                return false;
            }
        }
    

    【讨论】:

      【解决方案2】:

      我认为这可能是因为第一个匹配的路由是 Default.aspx 路由,所以它使用 URL“”。在 MVC 中,任何提供但未包含在路径中的参数都会自动添加为查询字符串值。

      路由按照定义的顺序被拾取,因此请尝试将routes.MapPageRoute("", "", "~/Default.aspx", true); 移动到默认路由之后。如果这样做,您可能需要删除控制器默认值,否则将为 URL "" 拾取此路由,该 URL "" 将传递给 Chips 控制器上的 Index 操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-09
        • 2018-08-07
        • 2015-11-18
        • 2016-12-06
        相关资源
        最近更新 更多