ich ein benutzerdefiniertes Modell Binder haben, in einer REST-API verwendet werden, die wie folgt aussieht:Modelbinder automatisch auf 0 bei der Rückkehr null anstelle des Wertes in der Steuerung gesetzt
public class CustomQueryModelBinder : IModelBinder
{
public Task<ModelBindingResult> BindModelAsync(ModelBindingContext bindingContext)
{
if (!String.IsNullOrWhiteSpace(bindingContext.ModelName) && bindingContext.ModelType == typeof(short) && bindingContext.ValueProvider.GetValue(bindingContext.ModelName) != null)
{
short value;
var val = bindingContext.ValueProvider.GetValue(bindingContext.ModelName).FirstValue as string;
if (String.IsNullOrWhiteSpace(val))
{
return ModelBindingResult.SuccessAsync(bindingContext.ModelName, val);
}
else if (Int16.TryParse(val, out value) && value >= 0)
{
return ModelBindingResult.SuccessAsync(bindingContext.ModelName, value);
}
else
{
bindingContext.ModelState.AddModelError(bindingContext.ModelName, "The value is invalid.");
}
}
return ModelBindingResult.FailedAsync(bindingContext.ModelName);
}
}
Und in Fällen, in denen der Brauch Wert wird in der URI sollte es auf einen gültigen Wert (größer als 0) aber es 0
immer säumigen Standard nicht angegeben, obwohl die Steuerung wie folgt aussieht:
public async Task<IActionResult> GetAsync(
[ModelBinder(BinderType = typeof(CustomQueryModelBinder))]short value = 100,
Grundsätzlich hier Wert sollte wird als sein Standardwert auf 100
festgelegt, wenn es als null
von der ModelBinder
zurückgibt.
Allerdings ist dies nicht passiert und es wird ständig als 0
zurückgegeben, was in System.ArgumentOutOfRangeException
resultiert, wenn Sie versuchen, eine Get zu tun.
Wir verwenden RC1.