MVC3路由基础(MVC3 Routing Basics)

2019-07-29 04:04发布

我学习MVC路由。 希望我的问题不看傻了,请帮助:)

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

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );

参考MSDN说,它需要一个字符串,字符串,对象,所以我尽量让一个小的变化(增加了一个“我”眼前的一切只是国防部的名字,看看它的工作原理):

    public static void RegisterRoutes(RouteCollection routes) {
        routes.IgnoreRoute("{myresource}.axd/{*mypathInfo}");

        routes.MapRoute(
            "myDefault", // Route name
            "{mycontroller}/{myaction}/{myid}", // URL with parameters
            new { mycontroller = "Home", myaction = "Index", myid = UrlParameter.Optional } // Parameter defaults
        );

它不工作了。 什么是这些字符串在“{}”大括号,和匿名对象值格式的格式。

{控制器} / {行动} / {ID} /产品/显示/饮料

{表} /Details.aspx /Products/Details.aspx

博客/ {行动} / {= 140598 /博客/显示/ 123

{REPORTTYPE} / {每年} / {月} / {}天/销售/ 2008/1/5

{区域设置} / {行动} / US /节目

{语言} - {国家} / {行动} / EN-US /节目

{控制器} / {行动} / {ID} HTTP://服务器/应用/产品/显示/饮料

{}资源个.axd / {*} PATHINFO HTTP://server/application/WebResource.axd d = ...

我google'd左右,但所有的职位似乎认为我所知道的格式,并且找不到任何细节explanation.Do他们有固定的名字,如{控制器} {行动} {ID}等等,或他们赢得了”将不起作用? 是否默认的匿名对象的值名称需要匹配他们吗? 此外,什么是“*”的意思是在{*} PATHINFO我无法找到的解释,neihter。 谢谢。

Answer 1:

首先,我们在这里需要一些定义。

让我们打破缺省路由。

routes.MapRoute( 
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
); 

在这种情况下,默认情况下,2号线,仅仅是用来识别路线的文字名称。

在第3行是URL模式。 这定义了路由如何匹配。 在括号中的东西是占位符。 它们映射到参数名称。 所以{}控制器映射到控制器名称。 {}动作映射到操作名称,并{ID}映射到参数调用ID。

第4行是默认值对象。 当他们无法从URL推断出该对象提供默认值。

因此,如果我们采取所有一起,这里有一些结论,我们可以得出:

当他们无法从URL字符串中推断,在默认对象只提供值。 因此,当进入的请求是刚刚/ ,从第4行的dfault值用于控制器和动作。 如果传入的请求是/Blah ,然后在第4行所提供的默认控制器被忽略,而不是MVC查找BlahController 。 然而,由于没有指定动作,从第4行的默认操作,使用Index

这里要记住的关键一点是,在第4行的值,如果没有在第3行的URL匹配只能使用。

所以,当你改变了一切,你为一个循环扔了一切。 这是一个毫无意义的路线,因为没有定义控制器或动作来使用的,而这两个值都在为了完成路线所需。 因此,MVC无法弄清楚你想要什么控制器。 对于这个问题或操作方法。

另一个例子:

routes.MapRoute(
    "Example",
    "Home/{action}/{myid}",
    new { controller = "NotHome", action = "Index", myid = UrlParameter.Optional }
);

因为没有{controller}中的URL占位符,然后在“NotHome”的使用默认值,这使得MVC寻找NotHomeController 。 所以的URL /Home/About/3意味着控制器=“NotHome”,行动=“关于”,以及身份识别码= 3。

总而言之,在归路, 有事必须在控制器和动作在最低值填补。 ID是可选的,可以被重命名为任何你喜欢的。 但是,事情必须设置控制器和动作参数或MVC不知道如何路由的事情。

此外,请记住,默认路由(或有效的默认路由)必须放在最后在列表中,否则没有其他途径将被匹配。

{*pathInfo}位被称为蛞蝓。 它基本上是一个通配符说:“这一切都点塞进一个名为PATHINFO参数后”。 因此,如果你有"{resource}.axd/{*pathInfo}"和这样的网址: http://blah/foo.axd/foo/bar/baz/bing然后两个参数生成,一个叫resource ,其将包含foo和一个叫pathInfo其中含有foo/bar/baz/bing



文章来源: MVC3 Routing Basics