[英]The ASP.NET MVC Routing Querystring vs Embedded Value Bewilderment
这可能已经被问过了-如果对不起! 我找不到 我不确定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.第二个论点是做什么的? 似乎第二个参数使您可以选择指定路由方式,如下所示:“ Net / Fix / hello”或通过以{controller} / {action} / {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..
问题是... 为什么?!
我希望问题清楚。.我将回答答案(如果以后再回答)。
第一个参数是路由名称。 每个路由应具有唯一的名称,并且它们可用于创建链接,以确保链接基于某条路由。 在您匹配路线的情况下这并不重要。
第二个参数是匹配模式。 字面值以大括号内的清晰和参数化值显示。 {}
。 参数化的值不仅用于指定参数的位置,还用于指定其名称 。
我不确定为什么要定义一条没有任何匹配模式的路线。 是否存在这样的MapRoute()
重载?
出现此行为的原因是此URL: http:/localhost:portno/Net/Index?value=hello
它与第二个 (默认)路由匹配,而不是第一个。
但是,请看第二种路由模式:
"{controller}/{action}/{id}"
控制器是第一个参数,动作是第二个参数。 因此,使用您的URL,该请求将路由到Net
控制器的Index
操作。 与您的第一个示例相同。
由于查询字符串包含一个value
参数,因此仍将其传递给action方法。 碰巧您的操作方法具有一个名为value
的string
参数,因此可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.