Asp.net mvc 如何在MVC默认路由中传递查询参数?

Asp.net mvc 如何在MVC默认路由中传递查询参数?,asp.net-mvc,Asp.net Mvc,我有一个MVC2项目,希望默认路由将查询参数传递给默认操作 现在我有一条这样的路线 routes.MapRoute( "Default", // Route name "", // URL pattern new { controller = "Search", action = "Index" } ); 如果我现在转到http://mysite,正确路由到搜索控制器上的索引操作,但如果输入http://mysite?theme=yellow,则主题参数不会传递给

我有一个MVC2项目,希望默认路由将查询参数传递给默认操作

现在我有一条这样的路线

routes.MapRoute(
     "Default", // Route name
     "", // URL pattern
     new { controller = "Search", action = "Index" }
);
如果我现在转到
http://mysite
,正确路由到搜索控制器上的索引操作,但如果输入
http://mysite?theme=yellow
,则
主题
参数不会传递给同一操作


如何创建传递任何给定查询参数的默认路由?

路由与查询参数无关。可以从与url模式匹配的控制器访问它们

所以,
“{controller}/{action}/{id}”,//URL模式
应该足够了

在控制器中,您可以通过请求属性查询参数:

var theme = Request["theme"];
或者,如果您想:

var theme = Request.QueryString["theme"];

听起来不对<代码>http://mysite?theme=yellow应解析为默认控制器并传递查询字符串,但不应将浏览器中的url更改为
http://mysite/Search/Index?theme=yellow
。你确定你没有重定向代码、重定向到操作调用等吗?好吧,我可能在那里用错了词-它没有重定向,它被路由到搜索控制器和索引操作。我在改变问题。不,他们不是<键入
http://mysite?theme=yellow
在浏览器的URL字段中。这里的MVC2和MVC3是否有区别?PS:我也尝试了你的URL模式,但没有成功。这很奇怪,我刚刚测试了你的代码,它对我有效。在那个断点上,Request.RawUrl说了什么?是的,我也不能重现您的错误。我得到的查询字符串很好。Request.RawUrl是“/”,但我刚刚发现
http://mysite/?theme=yellow
有效!注意后面的斜杠。对于该URL,Request.RawUrl为“/theme=yellow”。真奇怪。对我来说一点也不“原始”。但我想这意味着你毕竟是对的:)