繁体   English   中英

ASP.NET Core 模型绑定强制复杂类型的前缀

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM