2014-11-18 2 views
0

Я хотел бы записать и сохранить в файле журнала все запросы, которые должен обрабатывать мой WebAPI.Захват всех запросов WebAPI

Просто попытался сохранить Request.Content от конструктора контроллера, но, к сожалению, объект запроса имеет значение null из области конструктора контроллера.

Надеемся изучить эффективный способ сделать это.

+1

вы можете использовать инструменты, такие как '' log4net' или Elmah' для запроса регистрации и ответа – Raghuveer

+0

Спасибо, я ищу родное решение без использования внешних утилиты , – Omtechguy

ответ

2

я бы просто подключить в отслеживании веб апи ...

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

Я закончил внедрение промежуточного программного обеспечения, чтобы справиться с этим.

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

Тогда в вашем Startup.cs:

app.Use<GlobalRequestLogger>(); 
+0

Использование OWIN указывало мне в правильном направлении. Вы могли бы объяснить немного больше, например, как создать и настроить класс Startup и ждать этого. Next.Invoke (контекст); будет необходимо в переопределенном методе Invoke. Спасибо, в любом случае. –

Смежные вопросы