ASP.NET MVC-获取查询字符串值

ASP.NET MVC-获取查询字符串值,.net,asp.net,asp.net-mvc,.net,Asp.net,Asp.net Mvc,在ASP.NET MVC下,您是否应该像在ASP.NET WebForms中一样获取查询字符串参数?或者,[AcceptVerbs(HttpVerbs.Get)]声明是否以某种方式被使用?您可以始终像Web表单一样使用Request.QueryString集合,但也可以让MVC处理它们并将它们作为参数传递。这是建议的方法,因为它更简单,并且会自动验证输入数据类型。查询字符串参数只需使用操作上的参数即可接受,即 public ActionResult Foo(string someValue, i

在ASP.NET MVC下,您是否应该像在ASP.NET WebForms中一样获取查询字符串参数?或者,
[AcceptVerbs(HttpVerbs.Get)]
声明是否以某种方式被使用?

您可以始终像Web表单一样使用
Request.QueryString
集合,但也可以让MVC处理它们并将它们作为参数传递。这是建议的方法,因为它更简单,并且会自动验证输入数据类型。

查询字符串参数只需使用操作上的参数即可接受,即

public ActionResult Foo(string someValue, int someOtherValue) {...}
它将接受类似于
../someroute?someValue=abc&someOtherValue=123的查询


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

我建议使用控制器的ValueProvider属性,就像UpdateModel/TryUpdateModel提取所需的路由、查询和表单参数一样。这将防止您的方法签名可能会变得非常大,并且经常发生更改。由于您可以在单元测试期间向控制器提供ValueProvider,因此它还使测试变得更加容易。

我认为您需要的是

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

实际上,您可以通过两种方式在MVC中捕获查询字符串

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);

}
这将捕获两个查询字符串…例如:

/CrazyMVC?knownQuerystring=123&unknownQuerystring=456

Output: 123 - 456
别问我他们为什么那样设计。如果他们抛弃了单个查询字符串的整个控制器操作系统,只是通过URL表单编码返回URL的所有字符串/编码文件对象的捕获动态列表,那么就更有意义了,这样您就可以在一次调用中轻松访问所有字符串/编码文件对象。如果可能的话,也许有人能证明这一点


控制器如何捕获查询字符串对我来说毫无意义,但这确实意味着您在捕获查询字符串方面比他们开箱即用的方式更灵活。所以选择你的毒药……两者都很好。

这能防止查询字符串攻击吗?就像任何脚本注入一样?在这种情况下“someroute”是什么?