我的API管道中目前有一些错误处理中间件。我将添加一个日志记录中间件。目标是记录所有传入的请求和传出的响应,以及记录发生的任何错误。
这是可能的吗,并且在startup.cs中,日志记录中间件是否在错误处理之前发生?反之亦然?
答案 0 :(得分:1)
是的,这都是可能的。您可以将传入请求记录在中间件中,然后再将其通过管道传递,并记录传出响应(通过管道返回)。要记录错误,请用// What our controller looks like:
var maxLengthOfStrings = _db.Model
.FindEntityType(typeof(Validation))
.GetProperties()
.Where(p => p.ClrType == typeof(string))
.ToDictionary(prop => prop.Name, prop => new {
MaxLegnth = prop.GetMaxLength(),
// The part that is saying required doesn't exist
// in the context
IsRequired = prop.IsRequired()
});
// What our db context file looks like:
modelBuilder.Entity<DeploymentEnvironment>(entity =>
{
entity.HasKey(e => e.Code);
entity.Property(e => e.Code)
.HasMaxLength(100)
.ValueGeneratedNever();
entity.Property(e => e.Name)
.IsRequired()
.HasMaxLength(200);
});
/ next
将中间件的调用包装到try
,记录异常,然后重新抛出以进行错误处理的中间件将其提取。
下面是一个大概的例子:
catch
您的日志记录中间件在错误处理程序之后 ,以便它可以在错误处理程序启动之前(在返回管道的途中)进行登录。如果要在错误处理程序的之前添加日志记录中间件,则在中间件看到该异常时,该异常将已经转换为响应。