Ho un modello personalizzato legante, viene utilizzato in un'API REST, che appare come segue:Modelbinder predefinito è 0 quando ritorni null anziché il valore impostato nel controllore
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);
}
}
E nel caso in cui l'abitudine valore non è specificato nella URI si dovrebbe impostare un valore valido (maggiore di 0) tuttavia è sempre come default 0
, anche se il controller appare come segue:
public async Task<IActionResult> GetAsync(
[ModelBinder(BinderType = typeof(CustomQueryModelBinder))]short value = 100,
valutare qui Fondamentalmente dovrebbe essere impostato su 100
come valore predefinito quando restituisce come null
da ModelBinder
.
Tuttavia, ciò non sta accadendo e viene costantemente restituito come 0
che risulta in System.ArgumentOutOfRangeException
quando si tenta di eseguire un Get.
Stiamo usando RC1.