ASP.NET MVC路由查询字符串与嵌入式值的困惑

时间:2012-02-07 23:22:57

标签: c# asp.net asp.net-mvc-2 asp.net-mvc-routing

这可能已经被问过了 - 如果有抱歉的话!我找不到它。 我不确定asp如何能够决定何时使用查询字符串和“正常查看路径”(嵌入值) 以此为例:

routes.MapRoute(

    "SomePage",
    "Net/Fix/{value}",
    new { controller = "Net", action = "Index" }
    );

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

我不知道如何解释 - 我会尝试..如果我错了请解释

问题1。 是mapRoute中的第一个参数,以便我们可以指定在使用超链接时我们想要进行哪些路由?

问题2。 第二个论点是做什么的? 它显示为如果第二个参数提供指定路由应该如何,如下发生的选项:“净/修正/你好”或由{控制器} / {行动} / {somevar}的形式指定占位符

问题3: 我假设问题2场景中没有使用任何内容 - 这指定应该发生的默认路由?

问题4: ASP.NET如何推断是使用查询字符串还是嵌入值..

因为例如我决定打电话给我的页面

http:/localhost:portno/Net/Fix/hello

它尽职尽责地打印你好......但是当我这个

http:/localhost:portno/Net/Index/hello

它不起作用..除非我

http:/localhost:portno/Net/Index?value=hello..

问题是...... 为什么?!!!

我希望问题很明确。我会回复答案(如果有的话)。

1 个答案:

答案 0 :(得分:1)

第一个参数是路径名称。每条路由都应具有唯一的名称,并且它们可用于创建链接,以确保链接基于特定路径。在匹配路线时,这一点并不重要。

第二个参数是匹配模式。文字值以花括号内的清晰和参数化值显示。 {}。参数化值不仅用于指定参数的位置,还用于指定 name

我不确定你为什么要定义没有任何匹配模式的路线。是否存在MapRoute()这样的重载?

您获得使用此网址的行为的原因:http:/localhost:portno/Net/Index?value=hello它与第二个(默认)路由匹配,而不是第一个。

但是,请看第二种路线模式:

"{controller}/{action}/{id}"

控制器是第一个参数,动作是第二个参数。因此,使用您的网址,该请求会被路由到Net控制器Index操作。和你的第一个例子一样。

因为查询字符串包含value参数,所以仍然会将其传递给action方法。事实上,您的操作方法有一个名为string的{​​{1}}参数,因此它可以正常工作。