返回null而不是控制器中设置的值时,Modelbinder默认为0

时间:2016-03-04 11:38:45

标签: asp.net-core asp.net-core-mvc dnx

我有一个自定义模型绑定器,用于REST API,如下所示:

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,

此处的基本值应设置为100作为默认值,当它从null返回ModelBinder时。

然而,这种情况并没有发生,并且会一直以[{1}}的形式返回,这会导致0在尝试获取时获得。

我们正在使用 RC1

1 个答案:

答案 0 :(得分:0)

short value = 100替换short? value = 100似乎对我有用。 Hooray适用于可空类型。