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

Global string validation in ASP.NET core to black-list some characters

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

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

如果有这样的功能,我想要一个覆盖字符串模型活页夹的想法。

有什么简单的方法吗?

使用您自己的模型绑定器处理字符串非常简单。

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());

如果您想 return 失败而不是静默修改字符串。您可以实施验证属性并记住在任何地方使用它...

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