美文网首页
netcore2 Web Api中自定义ModelState进行

netcore2 Web Api中自定义ModelState进行

作者: 甘子的桃大哥 | 来源:发表于2019-06-28 09:57 被阅读0次

    在接口开发中,通常会涉及到表单提交,以及表单的验证。

    在视图模型中我们设置了表单验证

    当提交表单时,如果这些字段不通过则会抛回错误400

    这些错误使得前端比较难判断请求出错原因。

    我们可以通过Filter 知识点连接  https://www.cnblogs.com/snaildev/p/9154669.html

    来处理MVC的ModelState 知识点连接 https://www.cnblogs.com/hohoa/p/5839993.html

    下面我们开始自定义一个ModelState 处理

    首先定义错误信息返回模型

    /// <summary>

        /// 验证错误信息视图模型

        /// </summary>

        public class ErrorViewModel {

            /// <summary>

            /// 错误字段

            /// </summary>

            public string ErrorName { get; set; }

            /// <summary>

            /// 错误内容ErrorMessage

            /// </summary>

            public string Error { get; set; }

        }

    接下来我们自定义一个错误处理

    /// <summary>

        /// 请求验证错误处理

        /// </summary>

        [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true)]

        public class RequiredError : ResultFilterAttribute

        {

            public override void OnResultExecuting(ResultExecutingContext actionContext)

            {

                //base.OnResultExecuting(actionContext);

                var modelState = actionContext.ModelState;

                List<ErrorViewModel> Errors = new List<ErrorViewModel>();

                if (!modelState.IsValid)

                {

                    PagedList<ErrorViewModel> errorList = new PagedList<ErrorViewModel>();

                    BaseResult baseResult = new BaseResult();

                        foreach (var key in modelState.Keys)

                        {

                            var state = modelState[key];

                            if (state.Errors.Any())

                            {

                                ErrorViewModel errorView = new ErrorViewModel();

                            errorView.ErrorName = key.ToString();

                                errorView.Error = state.Errors.First().ErrorMessage;

                                Errors.Add(errorView);

                            }

                        }

                    errorList.Items = Errors;

                    baseResult = new BaseResult()

                        {

                            code = ResultCodeAddMsgKeys.CommonObjectFailCode,

                            msg = "请求验证失败",

                            data = errorList

                        };

                    actionContext.Result  = new ContentResult

                    {

                        Content = JsonConvert.SerializeObject(baseResult),

                        ContentType = "application/json"

                    };

                }

            }

        }

    这样已经定义完了。接下来我们去使用,到控制器里添加自定义错误验证的注解

    修改表单视图模型,增加以下错误验证提示方便前端阅读

    好了,我们再请求试一下。

    这样表单验证错误就会按照我们得需求格式返回了。不会直接返回400,而是根据业务返回错误码。

    代码也许不够好,可以指出。仅供初学者参考,大神可以指导,请不要太过严厉批评~~~~~~~~~~~

    相关文章

      网友评论

          本文标题:netcore2 Web Api中自定义ModelState进行

          本文链接:https://www.haomeiwen.com/subject/lsgjcctx.html