感谢您的关注,我意识到这个问题有点奇怪。以下是我希望实现的目标:
我正在使用System.ComponentModel.DataAnnotations
来验证从网页发布的模型。我已经将必要的代码部分抽象为共享方法:
public static string Create_Widget(WidgetModel postedWidget)
{
//Validate the model
var errors = HelperMethods.Validate(postedWidget);
if (!string.IsNullOrEmpty(errors))
{
return errors;
}
//Do other stuff
}
辅助方法:
public static string Validate<T>(T entity)
{
var context = new ValidationContext(entity, serviceProvider: null, items: null);
var results = new List<ValidationResult>();
Validator.TryValidateObject(entity, context, results);
return string.Join(",", results.Select(s => s.ErrorMessage));
}
我真正想要做的只是有一个扩展方法来验证我的模型,而不是在条件返回下面添加if statement
:
public static string Create_Widget(WidgetModel postedWidget)
{
//Validate the model
postedWidget.Validate(); //Automatically returns error string if errors.
//Do other stuff
}
这可能吗?
答案 0 :(得分:0)
感谢上述评论的帮助,我制作了以下代码,完全符合我的要求:
public static void Validate<T>(this T entity)
{
var errors = new List<ValidationResult>();
var result = "";
try
{
var context = new ValidationContext(entity, null, null);
Validator.TryValidateObject(entity, context, errors, true);
result = (errors.Any()) ? string.Join(",", errors.Select(s => s.ErrorMessage)) : "";
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
if (!string.IsNullOrEmpty(result))
{
throw new Exception(result);
}
}
假设您有一个带有数据验证注释的有效模型,您只需要:
widgetModel.Validate();
如果模型中的一个或多个属性未清除验证,则返回以逗号分隔的错误列表。在我的例子中,我在视图中使用AngularJS,因此我可以使用.error()
来捕获失败的api调用并使用视图中的错误列表。