它返回了 204, 也就是说被成功的执行了,那么肯定是有些地方没有做约束检查遗漏了。
因为我们只检查了patchDoc,而没有检查手动建立的那个CityUpdateResource(cityToPatch),所以这里可已使用TryValidateModel(xx),来手动检查cityToPatch:
测试:
这次OK了。
Log
在预备知识文章里,我已经介绍了Log相关的内容,所以这里就不再重复叙述了(https://www.cnblogs.com/cgzl/p/9019314.html)。
看我们之前写的捕获异常的代码,在Startup的Configure方法里:
现在的代码是为API的消费者返回了500状态码,并返回了一些错误信息。这样做我们就把异常信息给丢掉了,但是又不应该把异常信息传递给API消费者,而我们确实需要这个异常信息,所以我们把异常记录到日志。
有多种方式可以得到Logger,这里我使用ILoggerFactory:
然后在Configure方法里面相应的位置创建Logger并记录日志:
整个应用的日志还是做分类比较好,这里我使用LoggerFactory的CreateLogger方法创建了Logger,其分类是“Global Exception Logger”。
这里使用了500作为Log的EventId比较合适,毕竟是500错误。
我认为可以把Action里面返回500状态码的部分改成抛出异常。
然后我修改一下PATCH,以便能抛出一个异常:
测试:
异常被正常的抛出,在看一下控制台的Log:
Log信息也被正确的打印。
下面在看看如何在Controller里面记录日志,首先注入Logger:
ILogger<T>,T就是日志分类的名字,这里建议使用Controller的名字。
然后在Action里正常记录日志就可以了:
就不测试了。
使用Serilog
在实际应用中只把日志记录到控制台或Debug窗口是没用的,最好的办法还是记录到文件或者数据库等。
支持ASP.NET Core的第三方Log提供商有很多,NLog,Serilog等等。这里我使用Serilog(https://github.com/serilog/serilog)。
Nuget安装:
提示安装的依赖:
然后在Program.cs里使用扩展方法UseSerilog()使用Serilog即可,我就不做其它配置了: