操作参数是否有默认值

本文关键字:默认值 是否 参数 操作 | 更新日期: 2023-09-27 18:12:41

如何在ASP中找到自定义ModelBinder ?. NET MVC我是否绑定到一个参数,有一个默认值与否?

默认值:

public void Show(Ship ship = null)
{
     // ...
}

无默认值:

public void Show(Ship ship)
{
     // ...
}

ModelBinder:

public class ModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var modelType = bindingContext.ModelType;
        // Is it an item from the database?
        if (typeof(IDbObject).IsAssignableFrom(modelType))
        {
            // Get from database...
            var result = BindValue();
            if (result == null && NotOptional()) // Code for NotOptional needed
                throw new Exception();
            return result;
        }
    }
}

我想知道这一点,因为我想显示一个错误消息,如果用户对一个操作进行请求,而没有提供所有必要的信息(这将是所有没有默认值的参数)。

操作参数是否有默认值

如果我理解正确,您可以查询参数是否使用OptionalAttribute

进行装饰。
var method = typeof(YourClassName).GetMethod("Show");
foreach (var pi in method.GetParameters())
{
    var optionalAttribute = pi.GetCustomAttributes<OptionalAttribute>().FirstOrDefault();
    if (optionalAttribute != null)
    {
        //This is optional parameter
        object defaultValue = pi.DefaultValue;
    }
}

我不认为有任何有效或合理的方法来判断一个方法输入参数是否有默认值。如果您正在寻找一种确保传入数据正确的方法,您可能希望将视图表单字段绑定到模型并使用ModelState。用于测试是否所有字段都有数据。

一个很好的介绍可以在这里找到:http://www.codeproject.com/Articles/710776/Introduction-to-ASP-NET-MVC-Model-Binding-An-Absol