.net core Razor页面中绑定查询参数的规则
在Razor Pages中,如果你打电话,例如.net core Razor页面中绑定查询参数的规则,.net-core,razor-pages,.net Core,Razor Pages,在Razor Pages中,如果你打电话,例如 http://localhost/foo?bar=42 在相应的模型中,bar键可在OnGet构造函数中自动访问 public IActionResult OnGet(int bar) { System.Console.WriteLine($"bar is {bar}"); } 但是如果查询参数是poo,该怎么办 http://localhost/foo?poo=42 然后在模型中,bar没有得到值42 非常简单,获取与查询参数键匹配
http://localhost/foo?bar=42
在相应的模型中,bar
键可在OnGet
构造函数中自动访问
public IActionResult OnGet(int bar)
{
System.Console.WriteLine($"bar is {bar}");
}
但是如果查询参数是poo
,该怎么办
http://localhost/foo?poo=42
然后在模型中,bar
没有得到值42
非常简单,获取与查询参数键匹配的变量。但是如果键被连字符连接了呢
http://localhost/foo?foo-bar=42
foobar
绝对不是可接受的变量名。如何访问此查询参数?这里有什么规定
在我的特定情况下,我除了接收这些连字号查询字符串参数之外,没有其他选择。另外,我在
.netcore2.2
上 Razor页面中最简单的解决方案是使用Request.Query
:
public void OnGet()
{
var data = Request.Query["foo-bar"];
}
我认为海芬是用下划线表示的,所以foobar
变成了foobar
,然而这与标准的C#命名约定背道而驰
无论如何,我不建议将查询参数绑定为处理程序参数。最干净的解决方案是在PageModel
上定义一个属性,如下所示:
//来自Microsoft.AspNetCore.Mvc命名空间
[FromQuery(Name=“foo-bar”)]
公共字符串FooBar{get;set;}
这样,每当提供与该名称匹配的查询参数时,它都将被绑定。不管特定处理程序是否请求它。然后,您可以随时访问PageModel
上的属性。因此,示例方法变为:
public void OnGet()
{
System.Console.WriteLine($“bar是{FooBar}”);
}