使用C#,如何将一个return语句注入方法?

时间:2015-02-17 17:25:51

标签: c# validation model data-annotations

感谢您的关注,我意识到这个问题有点奇怪。以下是我希望实现的目标:

我拥有什么

我正在使用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

            }

这可能吗?

1 个答案:

答案 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调用并使用视图中的错误列表。