繁体   English   中英

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

[英]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方法。 碰巧您的操作方法具有一个名为valuestring参数,因此可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM