2013-06-12 29 views
11

ASP.NET Web API projemin tüm eylem çağrılarını günlüğe kaydetmek için bir ActionFilter kullanıyorum. OnActionExecuted yöntemi, neler olduğu hakkında çok şey anlatıyor.Bir ASP Web API eyleminin günlük süresi

Sadece yürütme zamanı ölçmek için etkili bir yol bulmak anlamaya olamaz

... Herhangi bir yardım için

teşekkürler! hile yapmak gerekir böyle

+1

System.Diagnostics.Stopwatch? – Joe

+0

Ayrıca, hem MVC API'leri hem de Web API'leri için [bu makale] 'ya (https://www.simple-talk.com/dotnet/performance/building-performance-metrics-into-asp.net-mvc-applications/) bakın. –

cevap

28

şey ...

public class StopwatchAttribute : ActionFilterAttribute 
{ 
    private const string StopwatchKey = "StopwatchFilter.Value"; 

    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     base.OnActionExecuting(actionContext); 

     actionContext.Request.Properties[StopwatchKey] = Stopwatch.StartNew(); 
    } 

    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) 
    { 
     base.OnActionExecuted(actionExecutedContext); 

     Stopwatch stopwatch = (Stopwatch)actionExecutedContext.Request.Properties[StopwatchKey]; 
     // TODO something useful with stopwatch.Elapsed 
     Trace.WriteLine("Elapsed = " + stopwatch.Elapsed); 
    } 
} 

Burada istek özelliklerinde yeni Stopwatch depolamak ve istek bitirdiği zaman durdurun.

+0

Çok teşekkür ederim Dean! Bu mükemmel bir çözüm! – RooSoft

+0

Örneği neden istekte saklıyorsunuz? Neden özel bir alan yapmıyorsun? – user49126

+3

@ user49126 Eylem filtreleri birden çok eylemde paylaşılır ve çok sayıda uçuş içi istek olabilir. Eşzamanlılık endişelerini ortadan kaldırmak için, örneği istek üzerine saklamak en güvenli yöntemdir. –