繁体   English   中英

URL路由C#mvc和Web窗体

[英]URL Routing C# mvc and Web Forms

所以我有一个webforms和一个mvc应用程序结合起来,我正在尝试正确地路由。 我的默认路由按预期工作,但是当我在其中一个视图中单击一个actionlink时,它没有路由到正确的页面。

这是我的路由代码。

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

我不确定要改变什么来弥补这种情况? 有任何想法吗?

我最终不得不添加路由约束。 这就是我最终做的事情。

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

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

路由按照定义的顺序被选中,因此尝试移动routes.MapPageRoute("", "", "~/Default.aspx", true); 在默认路线之后。 如果执行此操作,您可能需要删除控制器默认值,否则将获取此路由以获取将传递给Chips控制器上的Index操作的URL“”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM