参数的可空快捷方式或扩展名

时间:2014-07-05 22:56:39

标签: c# asp.net-mvc asp.net-mvc-4

我有以下几行代码,我重复了几十次,并且有类似的代码。

    public ActionResult View(int ? id)
    { 
        if (id.HasValue == false)
        {
            return HttpNotFound();
        }
       .....

    }

我怎样才能缩短它?

1 个答案:

答案 0 :(得分:0)

您可以为其创建属性。我看起来像这样:

<强>属性

public class NullableValidatorAttribute : ActionFilterAttribute
{
    protected String[] ParametersNames { get; set; }

    public String HttpNotFoundStatusDescription { get; set; }

    public NullableValidatorAttribute(params String[] parametersNames)
    {
        if (parametersNames == null)
            throw new ArgumentNullException("parametersNames");

        ParametersNames = parametersNames;
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var parametersNames = new HashSet<String>(ParametersNames);

        foreach (var parameterName in parametersNames)
        {
            var parameterValue = filterContext.ActionParameters[parameterName];

            if (parameterValue == null)
            {
                filterContext.Result = new HttpNotFoundResult(HttpNotFoundStatusDescription);
                return;
            }
        }

        base.OnActionExecuting(filterContext);
    }
}

<强>用法:

[NullableValidator("id", "id2", HttpNotFoundStatusDescription = "some description")]
public ViewResult Test(int? id, int? id2)
{
    return View();
}

以上只是一个原始实现。例如,您可以从构造函数中删除参数的名称,并解决任何操作参数(获取参数类型而不是反射或其他内容)等等。