2016-03-04 33 views
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

回答

0

替換short value = 100short? value = 100似乎爲我工作。 Hooray爲可空類型。