在ASP.NET MVC下你应该像在ASP.NET WebForms中那样获取QueryString参数吗?或以某种方式使用[AcceptVerbs(HttpVerbs.Get)]
声明?
答案 0 :(得分:101)
只需使用动作上的参数即可接受查询字符串参数 - 即
public ActionResult Foo(string someValue, int someOtherValue) {...}
将接受.../someroute?someValue=abc&someOtherValue=123
除此之外,您可以直接查看请求以获得更多控制权。
答案 1 :(得分:24)
您可以随时使用Request.QueryString
集合,例如Web表单,但您也可以让MVC处理它们并将它们作为参数传递。这是建议的方式,因为它更容易,它将自动验证输入数据类型。
答案 2 :(得分:23)
我认为你在寻找的是
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
答案 3 :(得分:7)
我建议使用控制器的ValueProvider属性,就像UpdateModel / TryUpdateModel提取所需的路由,查询和表单参数一样。这将使您的方法签名不会变得非常大并且经常变化。它还使测试更容易,因为您可以在单元测试期间向控制器提供ValueProvider。
答案 4 :(得分:1)
实际上你可以用两种方式在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
不要问我为什么他们这样设计。如果他们为单个查询字符串抛出整个Controller动作系统并且只是通过url-form-encoding为URL返回所有字符串/编码文件对象的捕获动态列表,那么更有意义,这样您就可以在一次调用中轻松访问它们。也许这里有人可以证明它是否可能?
对我来说没有任何意义,控制器如何捕获查询字符串,但它确实意味着您可以更灵活地捕获查询字符串,而不是教你开箱即用。所以选择你的毒药....两者都可以正常工作。
答案 5 :(得分:-1)
@Context.Request.Query["yourId"]