URL路由c# mvc和Web表单

本文关键字:Web 表单 mvc 路由 URL | 更新日期: 2023-09-27 18:09:43

所以我有一个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

我不知道要改变什么来补救这种情况?什么好主意吗?

URL路由c# mvc和Web表单

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

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;
        }
    }

我认为这可能是因为第一个匹配的路由是默认的。aspx路由,所以它使用URL "。在MVC中,任何提供但不包含在路径中的参数都会自动添加为querystring值。

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