P29 自定义错误信息和错误报告


https://www.bilibili.com/video/BV1XJ411q7yy?p=29
如果自定义错误信息。如何报告错误信息

争对上一节讲的自定义属性

这里也可以使用ErrorMessage参数,但是想要这个ErrorMessage正常的返回给我们的用户。必须要改一下自定义的Attribute里面的代码

就是要把这块给改了

首先我们这里先写点内容

然后这里我们使用上面传入的ErrorMessage参数

很简单,有个属性就叫做ErrorMessage

折一下行


测试

错误信息和报告



规定了错误信息的统一格式。原来我们只使用状态码的话,例如404 not found。这个状态码有时候不足以传达足够的信息。有时候对于我们人类的用户应该返回一个错误页面,上面有一些错误信息。




还可以识别出错误是属于哪个API


打开刚才的错误,首先是错误Type,我们打开这个链接地址。


使用浏览器打开这个链接地址

6.5.1是 400 Bad Request

发生了一个或者是多个验证的错误。
状态码status是400。我们之前讲过,对于这种实体验证的错误最好是返回422.

traceId,日志里面可能会出现这个,用它可以查询日志具体的错误。


下面就是要自定义这个返回的错误。

startup

我们队它进行设置。InvalidaModelStateResponseFactory它实际是一个action,这个action呢,我们可以对它进行设置。它会早Controller那个ModelState对象返回isvalid等于false的时候,它这个action就会被执行。

下面就写一下这个action,首先是一个参数,里面又是莱姆达表达式。


里面再new一个VlaidationProblemDetails 里面再传一个contex.ModelState

在ModelState里面初始化一些值

Type实际上我们可以自定义,

Type就是下面的这个type,链接地址的这个。目前默认返回的是一个链接地址,官方的文档。

我们可以自己实现一个链接,用户一旦发生错误,可以通过这个链接查找一些相关的内容。这里我们就先随便写一下。

状态码,我们应该返回的是422

422

instance通常就是请求路径。

增加traceId。用来做调用链的日志什么的

最后返回这个结果类型。把我们的problemDetails类型传进去。

然后它的格式需要设定一下。类型也是RC7807里面规定的。

测试

其他验证方式



这是我们现在的验证方式。model类和验证信息规则都放在一个类面了。相当于是一个类干了两个活


FluentValidation把验证规格和类分开了。相当于争对某一个Model再创建一个FluentValidation的验证类。。分离的好处呢就是容易进行单元测试。

实际项目中,稍微复杂点的建议使用FluentValidation

结束
 



 

原文地址:https://www.cnblogs.com/wangjunwei/p/14084607.html