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字符串参数的自定义模型绑定器?
基础教程推荐
- 从 VS 2017 .NET Core 项目的发布目录中排除文件 2022-01-01
- 首先创建代码,多对多,关联表中的附加字段 2022-01-01
- 在 VS2010 中的 Post Build 事件中将 bin 文件复制到物 2022-01-01
- 经典 Asp 中的 ResolveUrl/Url.Content 等效项 2022-01-01
- 全局 ASAX - 获取服务器名称 2022-01-01
- 错误“此流不支持搜索操作"在 C# 中 2022-01-01
- 如何动态获取文本框中datagridview列的总和 2022-01-01
- 是否可以在 asp classic 和 asp.net 之间共享会话状态 2022-01-01
- JSON.NET 中基于属性的类型解析 2022-01-01
- 将事件 TextChanged 分配给表单中的所有文本框 2022-01-01
