捕获所有WebAPI请求

时间:2014-11-18 14:06:08

标签: asp.net asp.net-mvc-4 asp.net-web-api

我想在日志文件中捕获并保存我的WebAPI应处理的所有请求。

试图从控制器构造函数中保存Request.Content,但不幸的是, 请求对象在控制器构造函数范围内为空。

希望学习一种有效的方法。

2 个答案:

答案 0 :(得分:2)

我只是想进入网络api跟踪......

http://www.asp.net/web-api/overview/testing-and-debugging/tracing-in-aspnet-web-api

从上面的文章中,您可以像这样实现ITraceWriter。此示例使用System.Diagnostics.Trace.WriteLine,但您也可以在此处插入文件。

public class SimpleTracer : ITraceWriter
{
    public void Trace(HttpRequestMessage request, string category, TraceLevel level, 
        Action<TraceRecord> traceAction)
    {
        TraceRecord rec = new TraceRecord(request, category, level);
        traceAction(rec);
        WriteTrace(rec);
    }

    protected void WriteTrace(TraceRecord rec)
    {
        var message = string.Format("{0};{1};{2}", 
            rec.Operator, rec.Operation, rec.Message);
        System.Diagnostics.Trace.WriteLine(message, rec.Category);
    }
}

从Trace方法中可以看到,您可以在此处访问HttpRequestMessage。

答案 1 :(得分:1)

我最终实现了中间件来处理它。

public class GlobalRequestLogger : OwinMiddleware
{
   public override Task Invoke(IOwinContext context)
   {
      // Implement logging code here
   }
}

然后在你的Startup.cs:

app.Use<GlobalRequestLogger>();