在ASP.NET MVC中,您是否应该像在ASP.NET WebForms中一样获取QueryString参数?还是
[AcceptVerbs(HttpVerbs.Get)]
声明会以某种方式被使用? [AcceptVerbs(HttpVerbs.Get)]
声明会以某种方式被使用?可以通过在操作中使用参数来接受查询字符串参数-即
public ActionResult Foo(string someValue, int someOtherValue) {...}
可以接受像.../someroute?someValue=abc&someOtherValue=123
这样的查询。
除此之外,您可以直接查看请求以获得更多控制。
我认为您正在寻找的是
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
你可以像Web Forms那样始终使用Request.QueryString
集合,但你也可以让MVC处理它们并将它们作为参数传递。这是建议的方式,因为它更简单,并且它会自动验证输入数据类型。
我建议使用控制器的ValueProvider属性,就像UpdateModel / TryUpdateModel一样,提取所需的路由,查询和表单参数。这将使您的方法签名不会因潜在增长而变得非常庞大,并且受到频繁更改的影响。这也使得测试变得更容易,因为您可以在单元测试期间向控制器提供ValueProvider。
实际上,你可以用两种方式在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
这是在.NET 6(和其他netcore)中的正确方式
var Param = Request.Query["IndexString"];
如果需要字符串
string Param = Request.Query["IndexString"].ToString();
@Context.Request.Query["yourId"]