2016-03-04 5 views
7

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.

Antwort

0

Ersetzen short value = 100 mit short? value = 100 scheint für mich gearbeitet zu haben. Hurra für NULL-fähige Typen.

Verwandte Themen