ASP.NET MVC路由系统

时间:2013-11-15 14:51:50

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 routes asp.net-mvc-routing

我在MVC路由中有一些问题。我试图了解如何 MVC路由工作,但似乎我迷路了。你的帮助, 非常感谢。

我在Global.asax中定义了两条路线,如下所示。

    routes.MapRoute(“Public”,“Public / {controller} / {action}”,new {controller =“Home”,action =“Index”});
        routes.MapRoute(“ShopSchema2”,“Shop / OldAction”,新{controller =“Home”,action =“Index”});

我的问题是(这可能很简单,但我很困惑)
1)当我输入“〜/ Public / Account / Register”时,它会转到Account controller和Register action。为什么第一段(公共)不被视为控制器的值?

2)当我输入“〜/ Shop / OldAction”时,它会转到Home controller和Index action。请描述。

3)路由系统默认将第一段作为控制器而第二段作为动作吗?

4)路由系统是否将我们在网址模式中{和}内提到的任何内容作为分段变量进行处理?


更新:请分享您对此事的了解。非常需要。

感谢

1 个答案:

答案 0 :(得分:0)

您已将“公开”作为固定短语放在下面的代码中:

Public/{controller}/{action}"

通常那里没有“公共”。如果你想公开动态,你必须把它放在像{public}这样的括号中,并在下面的代码中为“Public”添加功能:

{ controller = "Home", action = "Index" });    
{ controller = "Home", action = "Index", public="None" });

在第二行中,您将一个名为“Public”的变量传递给actionresult,默认情况下该字符串值为“None”,并且可以根据您公开的内容进行更改。

然而,在控制器变量之前放置任何变量并不常见。

{}中的任何内容都可以作为变量使用默认值,并且可以根据用户输入的地址进行更改。

routes.MapRoute("ShopSchema2", "Shop/OldAction", new { controller = "Home", action = "Index" });

默认情况下,上面的代码转到home / index。你没有在那里设置任何变量。

我希望这能回答所有3个问题