首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >URL路由C# mvc和Web Forms

URL路由C# mvc和Web Forms
EN

Stack Overflow用户
提问于 2013-04-17 01:01:32
回答 2查看 1.4K关注 0票数 0

因此,我将一个webforms和一个mvc应用程序组合在一起,并试图正确地进行路由。我的默认路由如预期的那样工作,但是当我在我的一个视图中点击一个动作链接时,它并没有路由到正确的页面。

这是我的路由代码。

代码语言:javascript
复制
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

我不确定该做些什么来弥补这种情况?有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-18 23:05:19

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

代码语言:javascript
复制
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 }
            );

和页面约束。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2013-04-18 00:34:00

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16042892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档