先实现自定义IModelBinder处理绑定逻辑,再通过IModelBinderProvider按条件选择该绑定器,最后在Program.cs中注册提供程序并用[ModelBinder]特性指定使用,从而实现对string类型参数的全局自定义绑定,如将输入值前缀加工返回。

在 ASP.NET Core 中,模型绑定器提供程序(IModelBinderProvider)用于决定在运行时使用哪个模型绑定器(IModelBinder)来绑定请求数据到控制器操作的参数或属性。要自定义模型绑定行为,你可以实现自己的 IModelBinderProvider 和 IModelBinder。
1. 实现自定义 IModelBinder
先创建一个类实现 IModelBinder,负责实际的数据绑定逻辑。
public class CustomModelBinder : IModelBinder{ public Task BindModelAsync(ModelBindingContext bindingContext) { if (bindingContext == null) throw new ArgumentNullException(nameof(bindingContext)); var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); if (valueProviderResult == ValueProviderResult.None) { return Task.CompletedTask; } bindingContext.ModelState.SetModelValue(bindingContext.ModelName, valueProviderResult); var value = valueProviderResult.FirstValue; // 假设绑定字符串并做简单处理 var model = $”CustomProcessed: {value}”; bindingContext.Result = ModelBindingResult.Success(model); return Task.CompletedTask; }}
2. 实现自定义 IModelBinderProvider
这个提供程序决定何时使用你的绑定器。它根据模型类型或特性来选择绑定器。
public class CustomModelBinderProvider : IModelBinderProvider{ public IModelBinder? GetBinder(ModelBinderProviderContext context) { if (context == null) throw new ArgumentNullException(nameof(context)); // 如果模型类型是 string,并且有特定特性,就使用 CustomModelBinder if (context.Metadata.ModelType == typeof(string) && context.BindingInfo?.BinderType == typeof(CustomModelBinder)) { return new CustomModelBinder(); } return null; // 返回 null 表示不处理,继续下一个提供程序 }}
3. 注册自定义提供程序
在 Program.cs 或 Startup.cs 中将你的提供程序添加到模型绑定器提供程序集合中。
var builder = WebApplication.CreateBuilder(args);builder.Services.AddControllers(options =>{ options.ModelBinderProviders.Insert(0, new CustomModelBinderProvider());});
注意:插入到开头以确保优先级最高,也可以用 Add 放在末尾让其作为后备选项。
4. 在控制器中使用
通过 [ModelBinder] 特性指定使用你的绑定器。
[HttpGet(“test”)]public IActionResult Test([ModelBinder(BinderType = typeof(CustomModelBinder))] string input){ return Ok(input);}
访问 /test?input=hello 会收到输出:"CustomProcessed: hello"。
基本上就这些。通过组合 IModelBinderProvider 和 IModelBinder,你可以灵活控制不同模型类型的绑定逻辑,比如基于特性、命名约定或复杂类型自动触发自定义绑定。这种方式适合需要全局统一处理某种类型输入的场景,比如 API 签名验证、加密字段解密等。
以上就是ASP.NET Core 中的模型绑定器提供程序如何自定义?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1440269.html
微信扫一扫
支付宝扫一扫