这可能已经被问过了 - 如果有抱歉的话!我找不到它。 我不确定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..
问题是...... 为什么?!!!
我希望问题很明确。我会回复答案(如果有的话)。
答案 0 :(得分:1)
第一个参数是路径名称。每条路由都应具有唯一的名称,并且它们可用于创建链接,以确保链接基于特定路径。在匹配路线时,这一点并不重要。
第二个参数是匹配模式。文字值以花括号内的清晰和参数化值显示。 {}
。参数化值不仅用于指定参数的位置,还用于指定 name 。
我不确定你为什么要定义没有任何匹配模式的路线。是否存在MapRoute()
这样的重载?
您获得使用此网址的行为的原因:http:/localhost:portno/Net/Index?value=hello
它与第二个(默认)路由匹配,而不是第一个。
但是,请看第二种路线模式:
"{controller}/{action}/{id}"
控制器是第一个参数,动作是第二个参数。因此,使用您的网址,该请求会被路由到Net
控制器Index
操作。和你的第一个例子一样。
因为查询字符串包含value
参数,所以仍然会将其传递给action方法。事实上,您的操作方法有一个名为string
的{{1}}参数,因此它可以正常工作。