[英]ASP.NET Core Model Binding to force the prefix on complex types
给定一个模型:
public class MyModel
{
public MyModel()
{
}
public string Prop1 { get; set; }
public string Prop2 { get; set; }
}
和控制器动作:
public async Task<IActionResult> MyAction(MyModel myModel) {}
如何实现模型绑定行为,使其正确绑定:
www.host.blah/page?MyModel.Prop1=a&MyModel.Prop2=b
这不会绑定(没有前缀):
www.host.blah/page?Prop1=a&Prop2=b
我不确定正确的术语,但从ASP.NET Core 中的模型绑定来看:
对于复杂类型的每个属性,模型绑定会查找名称模式 prefix.property_name 的源。 如果什么也没找到,它只查找没有前缀的 property_name。
但我想避免没有前缀的默认回退。
如果它完全相关,我正在尝试完成此操作,因为有问题的控制器可以嵌入其他控制器/页面中,作为 UI 中的子选项卡,因此我无法控制将存在哪些其他查询字符串参数观点。
尝试使用OnPageHandlerSelected
方法来操作在选择模型之前执行的查询字符串。 您可以全局注册它并在整个应用程序中使用它。
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Http.Extensions;
public override void OnPageHandlerSelected(PageHandlerSelectedContext context)
{
//...
var querystring = QueryHelpers.ParseQuery(context.HttpContext.Request.QueryString.Value);
var items = querystring.SelectMany(x => x.Value, (col, value) => new KeyValuePair<string, string>(col.Key, value)).ToList();
}
或者,您可以创建自己的模型绑定器
进一步阅读:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.