7
我有一個自定義模型粘結劑設置的值,在一個REST API,其看起來如下使用:ModelBinder的默認值爲0時,而不是在控制器
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);
}
}
而在情況下,自定義未在指定的URI值應該默認爲一個有效的值(大於0)但是它總是默認爲0
,即使控制器如下所示:
public async Task<IActionResult> GetAsync(
[ModelBinder(BinderType = typeof(CustomQueryModelBinder))]short value = 100,
基本價值應該在這裏當它從ModelBinder
返回爲null
時,將其設置爲其默認值100
。
然而,這是不會發生,它正不斷地返回0
試圖做一個獲取時所產生System.ArgumentOutOfRangeException
。
我們正在使用RC1。