用ASP.NET Core 2.0 建立规范的 REST API -- DELETE, UPDATE, PATCH (7)

用ASP.NET Core 2.0 建立规范的 REST API -- DELETE, UPDATE, PATCH

它返回了 204, 也就是说被成功的执行了,那么肯定是有些地方没有做约束检查遗漏了。

因为我们只检查了patchDoc,而没有检查手动建立的那个CityUpdateResource(cityToPatch),所以这里可已使用TryValidateModel(xx),来手动检查cityToPatch:

用ASP.NET Core 2.0 建立规范的 REST API -- DELETE, UPDATE, PATCH

测试:

用ASP.NET Core 2.0 建立规范的 REST API -- DELETE, UPDATE, PATCH

这次OK了。

 

Log

在预备知识文章里,我已经介绍了Log相关的内容,所以这里就不再重复叙述了(https://www.cnblogs.com/cgzl/p/9019314.html)。

看我们之前写的捕获异常的代码,在Startup的Configure方法里:

用ASP.NET Core 2.0 建立规范的 REST API -- DELETE, UPDATE, PATCH

现在的代码是为API的消费者返回了500状态码,并返回了一些错误信息。这样做我们就把异常信息给丢掉了,但是又不应该把异常信息传递给API消费者,而我们确实需要这个异常信息,所以我们把异常记录到日志。

有多种方式可以得到Logger,这里我使用ILoggerFactory:

用ASP.NET Core 2.0 建立规范的 REST API -- DELETE, UPDATE, PATCH

然后在Configure方法里面相应的位置创建Logger并记录日志:

用ASP.NET Core 2.0 建立规范的 REST API -- DELETE, UPDATE, PATCH

整个应用的日志还是做分类比较好,这里我使用LoggerFactory的CreateLogger方法创建了Logger,其分类是“Global Exception Logger”。

这里使用了500作为Log的EventId比较合适,毕竟是500错误。

我认为可以把Action里面返回500状态码的部分改成抛出异常。

然后我修改一下PATCH,以便能抛出一个异常:

用ASP.NET Core 2.0 建立规范的 REST API -- DELETE, UPDATE, PATCH

测试:

用ASP.NET Core 2.0 建立规范的 REST API -- DELETE, UPDATE, PATCH

异常被正常的抛出,在看一下控制台的Log:

用ASP.NET Core 2.0 建立规范的 REST API -- DELETE, UPDATE, PATCH

Log信息也被正确的打印。

 

下面在看看如何在Controller里面记录日志,首先注入Logger:

用ASP.NET Core 2.0 建立规范的 REST API -- DELETE, UPDATE, PATCH

ILogger<T>,T就是日志分类的名字,这里建议使用Controller的名字。

然后在Action里正常记录日志就可以了:

用ASP.NET Core 2.0 建立规范的 REST API -- DELETE, UPDATE, PATCH

就不测试了。

 

使用Serilog

在实际应用中只把日志记录到控制台或Debug窗口是没用的,最好的办法还是记录到文件或者数据库等。

支持ASP.NET Core的第三方Log提供商有很多,NLog,Serilog等等。这里我使用Serilog(https://github.com/serilog/serilog)。

Nuget安装:

用ASP.NET Core 2.0 建立规范的 REST API -- DELETE, UPDATE, PATCH

提示安装的依赖:

用ASP.NET Core 2.0 建立规范的 REST API -- DELETE, UPDATE, PATCH

然后在Program.cs里使用扩展方法UseSerilog()使用Serilog即可,我就不做其它配置了:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpssgj.html