代码之家  ›  专栏  ›  技术社区  ›  0xBADF00D

南希:如何在南希中记录回应主体

  •  1
  • 0xBADF00D  · 技术社区  · 7 年前

    如果我们在我们的应用程序中搜索失败,我们希望增加记录所有由我们的南希服务给出的请求和响应的可能性。为了实现这一点,我们添加了一些管道挂钩。 但不幸的是我无法得到我们的回应。当我执行将内容呈现给响应流(contents)的委托时,我的响应流(ms)将被释放。

    public void LogResponse(NancyContext context) {
    
        string CreateResponseMessage() {
            return $"Response (Client: {context.Request.UserHostAddress}) [{context.Request.Method}] {context.Request.Url}, " +
            $"Status code: {(int) context.Response.StatusCode} {context.Response.StatusCode}";
        }
    
        string CreateContentMessage() {
            using (var ms = new MemoryStream())
            {
                // For some reason, when executing this line, my ms is disposed
                context.Response.Contents(ms);
                ms.Seek(0, SeekOrigin.Begin);
                using (var sr = new StreamReader(ms)) {
                    var headers = FormatHeaders(context.Response.Headers);
                    var content = sr.ReadToEnd();
    
                    return
                        $"Headers:{NewLine}{headers}{NewLine}" +
                        $"Body:{NewLine} {content}";
                }
            }
        }
    
        Log.Info(CreateResponseMessage());
        Log.Verbose(CreateContentMessage);
    }
    

    这是获取身体内容的错误方法吗?有什么办法吗?

    0 回复  |  直到 7 年前
    推荐文章