ASP.NET核心中的全局字符串验证将某些字符列入黑名单

问题描述 投票:0回答:1

我有一个在.NET Core 3.1下运行的ASP.NET应用程序。

我想将某些字符全局列入黑名单(例如ASCII NUL(0x0),SOH(0x1),退格键,...)

如果有这样的功能,我想重写一个字符串模型绑定器。

有什么简单的方法吗?

c# validation asp.net-core model-binding
1个回答
0
投票
使用您自己的模型绑定器处理字符串非常简单。

public class MyBinder : IModelBinderProvider, IModelBinder { public IModelBinder GetBinder(ModelBinderProviderContext context) => (context.Metadata.ModelType == typeof(string)) ? this : null; public Task BindModelAsync(ModelBindingContext bindingContext) { var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); if (value != ValueProviderResult.None) { bindingContext.ModelState.SetModelValue(bindingContext.ModelName, value); var str = value.FirstValue; if (bindingContext.ModelMetadata.ConvertEmptyStringToNull && string.IsNullOrWhiteSpace(str)) str = null; // TODO strip out invalid characters here bindingContext.Result = ModelBindingResult.Success(str); } return Task.CompletedTask; } } options.ModelBinderProviders.Insert(0, new MyBinder());

如果要返回失败,而不是默默地修改字符串。您可以实现一个验证属性,并记得在各处使用它...

或实现IModelValidatorProvider并将IModelValidator添加到每个绑定的字符串值。

© www.soinside.com 2019 - 2024. All rights reserved.