Custom model binder for QueryString string parameters in ASP.NET Core 3.1?(ASP.NET Core 3.1中QueryString字符串参数的自定义模型绑定器?)
问题描述
我希望为某些数据类型实现一些/任何自定义行为,例如DateTime
或int
。
我已经创建了一个自定义JsonConverter
,它包含从请求正文接收的数据(除非它被指定为非json),这就允许我这样做。
但如果数据在请求的查询字符串中传递,例如?param1=helloWorld¶m2=123"
,则它们的处理方式不同,不在我的自定义JsonConverter
范围内。
我读过有关创建/实现我自己的自定义模型绑定器的内容,但从它的外观来看,这些是针对复杂类型的,所以我有点不知道如何准确地修改传入的查询字符串参数,或者如果不可能的话-获得对整个查询字符串的访问权限,搜索我想要修改的参数,然后修改这些参数。(与Action
方法分离,类似于筛选器等。)
谢谢!
推荐答案
创建/实现我自己的自定义模型绑定器,但从外观上看,这些绑定器是针对复杂类型的,因此我对如何准确地修改传入的查询字符串参数有点迷茫
您可以创建自定义模型绑定器并将其应用于简单类型参数,如下所示。
public IActionResult Test(string param1, [ModelBinder(BinderType = typeof(Param2ModelBinder))]int param2)
{
与Action方法分离,类似于筛选器等。
如果不想将自定义模型绑定器直接应用于操作参数,可以实现自定义模型绑定器提供程序并指定绑定器操作的参数,然后将其添加到MVC的提供程序集合中。
Param2ModelBinder类
public class Param2ModelBinder : IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
if (bindingContext == null)
{
throw new ArgumentNullException(nameof(bindingContext));
}
// ...
// implement it based on your actual requirement
// code logic here
// ...
var model = 0;
if (bindingContext.ValueProvider.GetValue("param2").FirstOrDefault() != null)
{
model = JsonSerializer.Deserialize<int>(bindingContext.ValueProvider.GetValue("param2").FirstOrDefault());
// just for testing purpose
// if received data > 100
// set it to 100
if ((int)model > 100)
{
model = 100;
}
}
bindingContext.Result = ModelBindingResult.Success(model);
return Task.CompletedTask;
}
}
MyCustomBinderProvider类
public class MyCustomBinderProvider : IModelBinderProvider
{
public IModelBinder GetBinder(ModelBinderProviderContext context)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
// specify the parameter your binder operates on
if (context.Metadata.ParameterName == "param2")
{
return new BinderTypeModelBinder(typeof(Param2ModelBinder));
}
return null;
}
}
添加自定义模型绑定器提供程序
services.AddControllersWithViews(opt=> {
opt.ModelBinderProviders.Insert(0, new MyCustomBinderProvider());
});
测试结果
这篇关于ASP.NET Core 3.1中QueryString字符串参数的自定义模型绑定器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:ASP.NET Core 3.1中QueryString字符串参数的自定义模型绑定器?
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01
- 如何用自己压缩一个 IEnumerable 2022-01-01
- 输入按键事件处理程序 2022-01-01
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- WebMatrix WebSecurity PasswordSalt 2022-01-01
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04