Razor 页面中绑定查询参数的规则
Posted
技术标签:
【中文标题】Razor 页面中绑定查询参数的规则【英文标题】:Rules for binding query parameters in Razor Pages 【发布时间】:2020-05-30 13:58:13 【问题描述】:在 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?foo-bar=42
foo-bar
绝对不是一个可接受的变量名。如何访问此查询参数?这里有什么规则?
在我的具体情况下,我别无选择,只能接收这些带连字符的查询字符串参数。另外,我在.net core 2.2
。
【问题讨论】:
【参考方案1】:我认为 heiphens 用下划线表示,所以foo-bar
变成了foo_bar
,但这违反了标准 C# 命名约定。
无论如何,我不建议将查询参数绑定为处理程序参数。最干净的解决方案是在您的 PageModel
上定义一个属性,如下所示:
// from the Microsoft.AspNetCore.Mvc namespace
[FromQuery(Name = "foo-bar")]
public string FooBar get; set;
这样,只要提供与该名称匹配的查询参数,它就会始终被绑定。无论特定的处理程序是否请求它。然后,您可以在需要时访问 PageModel
上的属性。所以你的示例方法变为:
public void OnGet()
System.Console.WriteLine($"bar is FooBar");
【讨论】:
【参考方案2】:Razor Pages 中最简单的解决方案是使用Request.Query
:
public void OnGet()
var data = Request.Query["foo-bar"];
【讨论】:
以上是关于Razor 页面中绑定查询参数的规则的主要内容,如果未能解决你的问题,请参考以下文章