【发布时间】:2021-08-21 08:24:35
【问题描述】:
我需要在我的ExceptionHandlingMiddleware 中获取异常后的请求正文。在异常之前我得到简单的请求正文,但在我不能之后。
部分代码来自下面ExceptionHandlingMiddleware。
try
{
await _next.Invoke(context);
}
catch (Exception exception)
{
RequestBody = await FormatRequest(context.Request);
}
private async Task<string> FormatRequest(HttpRequest request)
{
request.EnableBuffering();
var body = request.Body;
var buffer = new byte[Convert.ToInt32(request.ContentLength)];
await request.Body.ReadAsync(buffer, 0, buffer.Length);
var bodyAsText = Encoding.UTF8.GetString(buffer);
return $"{request.Scheme} {request.Host}{request.Path} {request.QueryString}
{bodyAsText}";
}
结果,我明白了
我试图通过这种方式将身体放在try 中
try
{
RequestBody = await FormatRequest(context.Request);
await _next.Invoke(context);
}
它有效,我得到了正常的json 数据,但我的模型是空的,所以我的模型无效。
我试图在异常之前做request.EnableBuffering();,但它没有帮助我。
因此,如果我尝试在异常后获取正文,我将无法解析它。如果我在异常之前得到它,我在控制器中的模型无效。
登录ExceptionHandlingMiddleware出现异常后如何获取模型?
【问题讨论】:
-
嗨@Stan,你能分享你的整个 ExceptionHandlingMiddleware 吗?尝试使用代码将流倒回到 0:
request.Body.Position = 0;。 -
@Rena 对不起,是你。 ;) 评论中的名称错误。帮我这个
request.Body.Position = 0;请创建答案
标签: c# asp.net-core middleware