ASP.NET MVC – 获取QueryString值

在ASP.NET MVC下,你应该像在ASP.NET WebForms中一样selectQueryString params? 或者[AcceptVerbs(HttpVerbs.Get)]声明得到了用处?

查询string参数可以简单地通过使用动作的参数来接受 – 即

public ActionResult Foo(string someValue, int someOtherValue) {...} 

这将接受像… / someroute?someValue = abc&someOtherValue = 123这样的查询

除此之外,您可以直接查看请求以获得更多控制。

您始终可以像使用Web窗体一样使用Request.QueryString集合,但是也可以使MVC处理它们并将它们作为parameter passing。 这是build议的方式,因为它更容易,它会自动validationinput数据types。

我想你在找什么

 Request.QueryString["QueryStringName"] 

你可以在视图上通过添加@

现在看看我的例子,,,我用QueryString生成一个Url

  var listURL = '@Url.RouteUrl(new { controller = "Sector", action = "List" , name = Request.QueryString["name"]})'; 

listURL值是/Sector/List?name=value'

queryString为空时

listURL值是/Sector/List

我build议使用控制器的ValueProvider属性,就像UpdateModel / TryUpdateModel一样,可以提取所需的路由,查询和表单参数。 这将使您的方法签名不会变得非常大,而且会经常发生变化。 这也使它更容易testing,因为您可以在unit testing期间向控制器提供ValueProvider。

其实你可以用两种方法在MVC中捕获查询string…..

 public ActionResult CrazyMVC(string knownQuerystring) { // This is the known query string captured by the Controller Action Method parameter above string myKnownQuerystring = knownQuerystring; // This is what I call the mysterious "unknown" query string // It is not known because the Controller isn't capturing it string myUnknownQuerystring = Request.QueryString["unknownQuerystring"]; return Content(myKnownQuerystring + " - " + myUnknownQuerystring); } 

这将捕获两个查询string…例如:

 /CrazyMVC?knownQuerystring=123&unknownQuerystring=456 Output: 123 - 456 

不要问我为什么这样devise。 如果他们为单个查询string抛出整个Controller操作系统,并通过url-form-encoding返回所有string/编码的文件对象的dynamic列表,则会更有意义,因此您可以在一次调用中轻松访问它们。 也许这里有人可以certificate,如果可能的话?

对我来说,如何控制器捕获查询string是没有意义的,但这确实意味着您可以更灵活地捕获查询string,而不是开箱即用。 所以select你的毒药….都工作正常。