我在某些操作中使用了一些Enum
作为参数。例如,我们有以下代码
public enum SomeEnum { SomeVal1 = 1, SomeVal2 = 2 }
[HttpGet]
public void SomeAction(SomeEnum someParameter) { }
默认情况下,asp.net引擎允许使用字符串和整数值,这就是为什么我们可以像“http://host/SomeController/SomeAction/SomeVal1”或“http://host/SomeController/SomeAction/1”或甚至“http://host/SomeController/SomeAction/”一样调用它。{{3 }}的 54 '!我想继续使用字符串值的第一个示例。为此,我实现了以下模型绑定器:
public class RequireStringsAttribute : ModelBinderAttribute
{
public RequireStringsAttribute() : base(typeof(ModelBinder))
{
}
private class ModelBinder : IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.FieldName).FirstValue;
var isValid = Enum.GetNames(bindingContext.ModelType).Any(name =>
name.Equals(value, StringComparison.OrdinalIgnoreCase));
if (isValid)
{
bindingContext.Result = ModelBindingResult.Success(Enum.Parse(bindingContext.ModelType, value, ignoreCase: true));
}
else
{
bindingContext.ActionContext.ModelState.AddModelError(bindingContext.FieldName, $"The value '{value}' is not valid.");
}
return Task.CompletedTask;
}
}
}
我已经应用了它:
[HttpGet]
public void SomeAction([RequireStrings]SomeEnum someParameter) { }
它工作正常,但我只是想知道有更好的方法吗?