我有以下几行代码,我重复了几十次,并且有类似的代码。
public ActionResult View(int ? id)
{
if (id.HasValue == false)
{
return HttpNotFound();
}
.....
}
我怎样才能缩短它?
答案 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();
}
以上只是一个原始实现。例如,您可以从构造函数中删除参数的名称,并解决任何操作参数(获取参数类型而不是反射或其他内容)等等。