2016-03-04 13 views
7

Tôi có một mô hình tùy chỉnh chất kết dính, được sử dụng trong một API REST, trông như sau:ModelBinder mặc định là 0 khi trở về null thay vì giá trị thiết lập trong bộ điều khiển

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); 
    } 
} 

Và trong trường hợp tùy chỉnh giá trị không được quy định trong URI nó nên mặc định cho một giá trị hợp lệ (lớn hơn 0) tuy nhiên nó luôn được mặc định cho 0, mặc dù bộ điều khiển trông như sau:

public async Task<IActionResult> GetAsync(
     [ModelBinder(BinderType = typeof(CustomQueryModelBinder))]short value = 100, 

về cơ bản đánh giá đây nên được đặt thành 100 làm giá trị mặc định của nó khi trả về là null từ số ModelBinder.

Tuy nhiên điều này không xảy ra và liên tục được trả lại là 0, kết quả là System.ArgumentOutOfRangeException khi cố gắng thực hiện Nhận.

Chúng tôi đang sử dụng RC1.

Trả lời

0

Thay thế short value = 100 bằng short? value = 100 dường như đã hoạt động đối với tôi. Hooray cho các loại nullable.

Các vấn đề liên quan