9

我想记录 servicestack webservice 的整个请求和响应对。我查看了响应文件管理器,但是暴露的流是只读的。

4

2 回答 2

12

你见过 ServiceStack 内置的Request Logger Plugin 吗?它是一个可配置的内存、CSV 或 Redis 请求记录器,用于维护最近请求的日志 /(错误响应)。

如果您想要不同的行为,您可以实现并注册自己的IRequestLogger,它会为每个请求调用。使用以下参数为每个请求调用它的 log 方法。

Log(IRequest httpReq, object requestDto, object response, TimeSpan duration);

IRequest你可以得到原始的 .NET Core/ASP.NET/HttpListener Request / Response 类型

var originalReq = httpReq.OriginalRequest;
var originalRes = httpReq.OriginalResponse;

过滤响应

否则,内省响应的方法是

于 2012-07-23T04:31:53.367 回答
1

此 RequestFilter 允许您打印原始请求内容。如果需要,您可以对其进行修改以获取更多信息,例如标题和 cookie。正如@mythz 在评论中指出的那样,这没有 Request Logger 插件那么详细。但是,如果您只想为单个请求添加日志记录,则可能更可取。免责声明:此代码可能不是生产就绪的,我没有将它用于生产。

public class RequestDataSpyAttribute : RequestFilterAttribute
{
    // gets injected by ServiceStack
    public ILog Log { get; set; }

    private readonly string _logMessage;

    public RequestDataSpyAttribute(string logMessage)
    {
        _logMessage = logMessage;
    }

    public override void Execute(IRequest req, IResponse res, object requestDto)
    {
        System.Web.HttpRequestWrapper original = req.OriginalRequest as System.Web.HttpRequestWrapper;
        if (original == null)
            return;

        Log.Debug($"{_logMessage} Request: {original.InputStream.ReadToEnd()}");
    }
}
于 2021-03-09T19:50:54.433 回答