【问题标题】:How to read JSON body in HttpActionExecutedContext in case of exception发生异常时如何在 HttpActionExecutedContext 中读取 JSON 正文
【发布时间】:2016-08-09 11:16:57
【问题描述】:

我们正在使用 Web API 2,为了处理异常,我们通过继承 ExceptionFilterAttribute 创建了一个自定义属性。现在我们想将 JSON 请求的日志保存到数据库以防异常。

我尝试使用 context.Request.Content.ReadAsStringAsync().Result 进行读取,但它返回的是空字符串。

请帮忙!!

【问题讨论】:

    标签: c# asp.net-web-api2 httpcontext


    【解决方案1】:

    您可以重置请求流位置并重新读取:

    class CustomExceptionFilterAttribute : ExceptionFilterAttribute
    {
        public override async Task OnExceptionAsync(HttpActionExecutedContext context, CancellationToken cancellationToken)
        {
            var stream = await context.Request.Content.ReadAsStreamAsync();
            stream.Position = 0;
            using (var reader = new StreamReader(stream))
            {
                var requestString = reader.ReadToEnd();
            }
        }
    }
    

    【讨论】:

    • 感谢您回答我的问题并提供解决方案,但是当我使用 OnException 方法时,为什么我无法读取请求正文。请提出建议。
    • 因为请求流已经被框架解析和读取了。您可以使用与我在寻找流开始时相同的技巧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多