[Fixes #3279] Added DiagnosticSource for filters

This commit is contained in:
Ajay Bhargav Baaskaran 2015-10-20 16:44:21 -07:00
parent 624c918de5
commit b6d7012c27
4 changed files with 725 additions and 47 deletions

View File

@ -8,6 +8,7 @@ using System.Runtime.ExceptionServices;
using System.Threading.Tasks;
using Microsoft.AspNet.Mvc.Abstractions;
using Microsoft.AspNet.Mvc.Core;
using Microsoft.AspNet.Mvc.Diagnostics;
using Microsoft.AspNet.Mvc.Filters;
using Microsoft.AspNet.Mvc.Formatters;
using Microsoft.AspNet.Mvc.Infrastructure;
@ -288,8 +289,16 @@ namespace Microsoft.AspNet.Mvc.Controllers
var current = _cursor.GetNextFilter<IAuthorizationFilter, IAsyncAuthorizationFilter>();
if (current.FilterAsync != null)
{
_diagnosticSource.BeforeOnAuthorizationAsync(
_authorizationContext,
current.FilterAsync);
await current.FilterAsync.OnAuthorizationAsync(_authorizationContext);
_diagnosticSource.AfterOnAuthorizationAsync(
_authorizationContext,
current.FilterAsync);
if (_authorizationContext.Result == null)
{
// Only keep going if we don't have a result
@ -302,8 +311,16 @@ namespace Microsoft.AspNet.Mvc.Controllers
}
else if (current.Filter != null)
{
_diagnosticSource.BeforeOnAuthorization(
_authorizationContext,
current.Filter);
current.Filter.OnAuthorization(_authorizationContext);
_diagnosticSource.AfterOnAuthorization(
_authorizationContext,
current.Filter);
if (_authorizationContext.Result == null)
{
// Only keep going if we don't have a result
@ -358,10 +375,19 @@ namespace Microsoft.AspNet.Mvc.Controllers
{
if (item.FilterAsync != null)
{
_diagnosticSource.BeforeOnResourceExecution(
_resourceExecutingContext,
item.FilterAsync);
await item.FilterAsync.OnResourceExecutionAsync(
_resourceExecutingContext,
InvokeResourceFilterAsync);
_diagnosticSource.AfterOnResourceExecution(
_resourceExecutingContext.ActionDescriptor,
_resourceExecutedContext,
item.FilterAsync);
if (_resourceExecutedContext == null)
{
// If we get here then the filter didn't call 'next' indicating a short circuit
@ -383,8 +409,16 @@ namespace Microsoft.AspNet.Mvc.Controllers
}
else if (item.Filter != null)
{
_diagnosticSource.BeforeOnResourceExecuting(
_resourceExecutingContext,
item.Filter);
item.Filter.OnResourceExecuting(_resourceExecutingContext);
_diagnosticSource.AfterOnResourceExecuting(
_resourceExecutingContext,
item.Filter);
if (_resourceExecutingContext.Result != null)
{
// Short-circuited by setting a result.
@ -400,7 +434,17 @@ namespace Microsoft.AspNet.Mvc.Controllers
}
else
{
_diagnosticSource.BeforeOnResourceExecuted(
_resourceExecutingContext.ActionDescriptor,
_resourceExecutedContext,
item.Filter);
item.Filter.OnResourceExecuted(await InvokeResourceFilterAsync());
_diagnosticSource.AfterOnResourceExecuted(
_resourceExecutingContext.ActionDescriptor,
_resourceExecutedContext,
item.Filter);
}
}
else
@ -500,10 +544,18 @@ namespace Microsoft.AspNet.Mvc.Controllers
Debug.Assert(_exceptionContext != null);
if (_exceptionContext.Exception != null)
{
_diagnosticSource.BeforeOnExceptionAsync(
_exceptionContext,
current.FilterAsync);
// Exception filters only run when there's an exception - unsetting it will short-circuit
// other exception filters.
await current.FilterAsync.OnExceptionAsync(_exceptionContext);
_diagnosticSource.AfterOnExceptionAsync(
_exceptionContext,
current.FilterAsync);
if (_exceptionContext.Exception == null)
{
Logger.LogVerbose(
@ -521,10 +573,18 @@ namespace Microsoft.AspNet.Mvc.Controllers
Debug.Assert(_exceptionContext != null);
if (_exceptionContext.Exception != null)
{
_diagnosticSource.BeforeOnException(
_exceptionContext,
current.Filter);
// Exception filters only run when there's an exception - unsetting it will short-circuit
// other exception filters.
current.Filter.OnException(_exceptionContext);
_diagnosticSource.AfterOnException(
_exceptionContext,
current.Filter);
if (_exceptionContext.Exception == null)
{
Logger.LogVerbose(
@ -602,8 +662,17 @@ namespace Microsoft.AspNet.Mvc.Controllers
{
if (item.FilterAsync != null)
{
_diagnosticSource.BeforeOnActionExecution(
_actionExecutingContext,
item.FilterAsync);
await item.FilterAsync.OnActionExecutionAsync(_actionExecutingContext, InvokeActionFilterAsync);
_diagnosticSource.AfterOnActionExecution(
_actionExecutingContext.ActionDescriptor,
_actionExecutedContext,
item.FilterAsync);
if (_actionExecutedContext == null)
{
// If we get here then the filter didn't call 'next' indicating a short circuit
@ -622,8 +691,16 @@ namespace Microsoft.AspNet.Mvc.Controllers
}
else if (item.Filter != null)
{
_diagnosticSource.BeforeOnActionExecuting(
_actionExecutingContext,
item.Filter);
item.Filter.OnActionExecuting(_actionExecutingContext);
_diagnosticSource.AfterOnActionExecuting(
_actionExecutingContext,
item.Filter);
if (_actionExecutingContext.Result != null)
{
// Short-circuited by setting a result.
@ -641,7 +718,17 @@ namespace Microsoft.AspNet.Mvc.Controllers
}
else
{
_diagnosticSource.BeforeOnActionExecuted(
_actionExecutingContext.ActionDescriptor,
_actionExecutedContext,
item.Filter);
item.Filter.OnActionExecuted(await InvokeActionFilterAsync());
_diagnosticSource.BeforeOnActionExecuted(
_actionExecutingContext.ActionDescriptor,
_actionExecutedContext,
item.Filter);
}
}
else
@ -651,34 +738,20 @@ namespace Microsoft.AspNet.Mvc.Controllers
try
{
if (_diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.BeforeActionMethod"))
{
_diagnosticSource.Write(
"Microsoft.AspNet.Mvc.BeforeActionMethod",
new
{
actionContext = ActionContext,
arguments = _actionExecutingContext.ActionArguments,
controller = _actionExecutingContext.Controller
});
}
_diagnosticSource.BeforeActionMethod(
ActionContext,
_actionExecutingContext.ActionArguments,
_actionExecutingContext.Controller);
result = await InvokeActionAsync(_actionExecutingContext);
}
finally
{
if (_diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.AfterActionMethod"))
{
_diagnosticSource.Write(
"Microsoft.AspNet.Mvc.AfterActionMethod",
new
{
actionContext = ActionContext,
arguments = _actionExecutingContext.ActionArguments,
controller = _actionExecutingContext.Controller,
result = result
});
}
_diagnosticSource.AfterActionMethod(
ActionContext,
_actionExecutingContext.ActionArguments,
_actionExecutingContext.Controller,
result);
}
_actionExecutedContext = new ActionExecutedContext(
@ -747,8 +820,17 @@ namespace Microsoft.AspNet.Mvc.Controllers
var item = _cursor.GetNextFilter<IResultFilter, IAsyncResultFilter>();
if (item.FilterAsync != null)
{
_diagnosticSource.BeforeOnResultExecution(
_resultExecutingContext,
item.FilterAsync);
await item.FilterAsync.OnResultExecutionAsync(_resultExecutingContext, InvokeResultFilterAsync);
_diagnosticSource.AfterOnResultExecution(
_resultExecutingContext.ActionDescriptor,
_resultExecutedContext,
item.FilterAsync);
if (_resultExecutedContext == null || _resultExecutingContext.Cancel == true)
{
// Short-circuited by not calling next || Short-circuited by setting Cancel == true
@ -766,8 +848,16 @@ namespace Microsoft.AspNet.Mvc.Controllers
}
else if (item.Filter != null)
{
_diagnosticSource.BeforeOnResultExecuting(
_resultExecutingContext,
item.Filter);
item.Filter.OnResultExecuting(_resultExecutingContext);
_diagnosticSource.AfterOnResultExecuting(
_resultExecutingContext,
item.Filter);
if (_resultExecutingContext.Cancel == true)
{
// Short-circuited by setting Cancel == true
@ -784,7 +874,17 @@ namespace Microsoft.AspNet.Mvc.Controllers
}
else
{
_diagnosticSource.BeforeOnResultExecuted(
_resultExecutingContext.ActionDescriptor,
_resultExecutedContext,
item.Filter);
item.Filter.OnResultExecuted(await InvokeResultFilterAsync());
_diagnosticSource.AfterOnResultExecuted(
_resultExecutingContext.ActionDescriptor,
_resultExecutedContext,
item.Filter);
}
}
else
@ -824,12 +924,7 @@ namespace Microsoft.AspNet.Mvc.Controllers
private async Task InvokeResultAsync(IActionResult result)
{
if (_diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.BeforeActionResult"))
{
_diagnosticSource.Write(
"Microsoft.AspNet.Mvc.BeforeActionResult",
new { actionContext = ActionContext, result = result });
}
_diagnosticSource.BeforeActionResult(ActionContext, result);
try
{
@ -837,12 +932,7 @@ namespace Microsoft.AspNet.Mvc.Controllers
}
finally
{
if (_diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.AfterActionResult"))
{
_diagnosticSource.Write(
"Microsoft.AspNet.Mvc.AfterActionResult",
new { actionContext = ActionContext, result = result });
}
_diagnosticSource.AfterActionResult(ActionContext, result);
}
}

View File

@ -0,0 +1,556 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Generic;
using System.Diagnostics;
using Microsoft.AspNet.Mvc.Abstractions;
using Microsoft.AspNet.Mvc.Filters;
namespace Microsoft.AspNet.Mvc.Diagnostics
{
public static class FilterActionInvokerDiagnosticSourceExtensions
{
public static void BeforeOnAuthorizationAsync(
this DiagnosticSource diagnosticSource,
AuthorizationContext authorizationContext,
IAsyncAuthorizationFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.BeforeOnAuthorization"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.BeforeOnAuthorization",
new
{
actionDescriptor = authorizationContext.ActionDescriptor,
authorizationContext = authorizationContext,
filter = filter
});
}
}
public static void AfterOnAuthorizationAsync(
this DiagnosticSource diagnosticSource,
AuthorizationContext authorizationContext,
IAsyncAuthorizationFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.AfterOnAuthorization"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.AfterOnAuthorization",
new
{
actionDescriptor = authorizationContext.ActionDescriptor,
authorizationContext = authorizationContext,
filter = filter
});
}
}
public static void BeforeOnAuthorization(
this DiagnosticSource diagnosticSource,
AuthorizationContext authorizationContext,
IAuthorizationFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.BeforeOnAuthorization"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.BeforeOnAuthorization",
new
{
actionDescriptor = authorizationContext.ActionDescriptor,
authorizationContext = authorizationContext,
filter = filter
});
}
}
public static void AfterOnAuthorization(
this DiagnosticSource diagnosticSource,
AuthorizationContext authorizationContext,
IAuthorizationFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.AfterOnAuthorization"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.AfterOnAuthorization",
new
{
actionDescriptor = authorizationContext.ActionDescriptor,
authorizationContext = authorizationContext,
filter = filter
});
}
}
public static void BeforeOnResourceExecution(
this DiagnosticSource diagnosticSource,
ResourceExecutingContext resourceExecutingContext,
IAsyncResourceFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.BeforeOnResourceExecution"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.BeforeOnResourceExecution",
new
{
actionDescriptor = resourceExecutingContext.ActionDescriptor,
resourceExecutingContext = resourceExecutingContext,
filter = filter
});
}
}
public static void AfterOnResourceExecution(
this DiagnosticSource diagnosticSource,
ActionDescriptor actionDescriptor,
ResourceExecutedContext resourceExecutedContext,
IAsyncResourceFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.AfterOnResourceExecution"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.AfterOnResourceExecution",
new
{
actionDescriptor = actionDescriptor,
resourceExecutedContext = resourceExecutedContext,
filter = filter
});
}
}
public static void BeforeOnResourceExecuting(
this DiagnosticSource diagnosticSource,
ResourceExecutingContext resourceExecutingContext,
IResourceFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.BeforeOnResourceExecuting"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.BeforeOnResourceExecuting",
new
{
actionDescriptor = resourceExecutingContext.ActionDescriptor,
resourceExecutingContext = resourceExecutingContext,
filter = filter
});
}
}
public static void AfterOnResourceExecuting(
this DiagnosticSource diagnosticSource,
ResourceExecutingContext resourceExecutingContext,
IResourceFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.AfterOnResourceExecuting"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.AfterOnResourceExecuting",
new
{
actionDescriptor = resourceExecutingContext.ActionDescriptor,
resourceExecutingContext = resourceExecutingContext,
filter = filter
});
}
}
public static void BeforeOnResourceExecuted(
this DiagnosticSource diagnosticSource,
ActionDescriptor actionDescriptor,
ResourceExecutedContext resourceExecutedContext,
IResourceFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.BeforeOnResourceExecuted"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.BeforeOnResourceExecuted",
new
{
actionDescriptor = actionDescriptor,
resourceExecutedContext = resourceExecutedContext,
filter = filter
});
}
}
public static void AfterOnResourceExecuted(
this DiagnosticSource diagnosticSource,
ActionDescriptor actionDescriptor,
ResourceExecutedContext resourceExecutedContext,
IResourceFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.AfterOnResourceExecuted"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.AfterOnResourceExecuted",
new
{
actionDescriptor = actionDescriptor,
resourceExecutedContext = resourceExecutedContext,
filter = filter
});
}
}
public static void BeforeOnExceptionAsync(
this DiagnosticSource diagnosticSource,
ExceptionContext exceptionContext,
IAsyncExceptionFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.BeforeOnException"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.BeforeOnException",
new
{
actionDescriptor = exceptionContext.ActionDescriptor,
exceptionContext = exceptionContext,
filter = filter
});
}
}
public static void AfterOnExceptionAsync(
this DiagnosticSource diagnosticSource,
ExceptionContext exceptionContext,
IAsyncExceptionFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.AfterOnException"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.AfterOnException",
new
{
actionDescriptor = exceptionContext.ActionDescriptor,
exceptionContext = exceptionContext,
filter = filter
});
}
}
public static void BeforeOnException(
this DiagnosticSource diagnosticSource,
ExceptionContext exceptionContext,
IExceptionFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.BeforeOnException"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.BeforeOnException",
new
{
actionDescriptor = exceptionContext.ActionDescriptor,
exceptionContext = exceptionContext,
filter = filter
});
}
}
public static void AfterOnException(
this DiagnosticSource diagnosticSource,
ExceptionContext exceptionContext,
IExceptionFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.AfterOnException"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.AfterOnException",
new
{
actionDescriptor = exceptionContext.ActionDescriptor,
exceptionContext = exceptionContext,
filter = filter
});
}
}
public static void BeforeOnActionExecution(
this DiagnosticSource diagnosticSource,
ActionExecutingContext actionExecutingContext,
IAsyncActionFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.BeforeOnActionExecution"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.BeforeOnActionExecution",
new
{
actionDescriptor = actionExecutingContext.ActionDescriptor,
actionExecutingContext = actionExecutingContext,
filter = filter
});
}
}
public static void AfterOnActionExecution(
this DiagnosticSource diagnosticSource,
ActionDescriptor actionDescriptor,
ActionExecutedContext actionExecutedContext,
IAsyncActionFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.AfterOnActionExecution"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.AfterOnActionExecution",
new
{
actionDescriptor = actionDescriptor,
actionExecutedContext = actionExecutedContext,
filter = filter
});
}
}
public static void BeforeOnActionExecuting(
this DiagnosticSource diagnosticSource,
ActionExecutingContext actionExecutingContext,
IActionFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.BeforeOnActionExecuting"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.BeforeOnActionExecuting",
new
{
actionDescriptor = actionExecutingContext.ActionDescriptor,
actionExecutingContext = actionExecutingContext,
filter = filter
});
}
}
public static void AfterOnActionExecuting(
this DiagnosticSource diagnosticSource,
ActionExecutingContext actionExecutingContext,
IActionFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.AfterOnActionExecuting"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.AfterOnActionExecuting",
new
{
actionDescriptor = actionExecutingContext.ActionDescriptor,
actionExecutingContext = actionExecutingContext,
filter = filter
});
}
}
public static void BeforeOnActionExecuted(
this DiagnosticSource diagnosticSource,
ActionDescriptor actionDescriptor,
ActionExecutedContext actionExecutedContext,
IActionFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.BeforeOnActionExecuted"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.BeforeOnActionExecuted",
new
{
actionDescriptor = actionDescriptor,
actionExecutedContext = actionExecutedContext,
filter = filter
});
}
}
public static void AfterOnActionExecuted(
this DiagnosticSource diagnosticSource,
ActionDescriptor actionDescriptor,
ActionExecutedContext actionExecutedContext,
IActionFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.AfterOnActionExecuted"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.AfterOnActionExecuted",
new
{
actionDescriptor = actionDescriptor,
actionExecutedContext = actionExecutedContext,
filter = filter
});
}
}
public static void BeforeActionMethod(
this DiagnosticSource diagnosticSource,
ActionContext actionContext,
IDictionary<string, object> actionArguments,
object controller)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.BeforeActionMethod"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.BeforeActionMethod",
new
{
actionContext = actionContext,
arguments = actionArguments,
controller = controller
});
}
}
public static void AfterActionMethod(
this DiagnosticSource diagnosticSource,
ActionContext actionContext,
IDictionary<string, object> actionArguments,
object controller,
IActionResult result)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.AfterActionMethod"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.AfterActionMethod",
new
{
actionContext = actionContext,
arguments = actionArguments,
controller = controller,
result = result
});
}
}
public static void BeforeOnResultExecution(
this DiagnosticSource diagnosticSource,
ResultExecutingContext resultExecutingContext,
IAsyncResultFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.BeforeOnResultExecution"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.BeforeOnResultExecution",
new
{
actionDescriptor = resultExecutingContext.ActionDescriptor,
resultExecutingContext = resultExecutingContext,
filter = filter
});
}
}
public static void AfterOnResultExecution(
this DiagnosticSource diagnosticSource,
ActionDescriptor actionDescriptor,
ResultExecutedContext resultExecutedContext,
IAsyncResultFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.AfterOnResultExecution"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.AfterOnResultExecution",
new
{
actionDescriptor = actionDescriptor,
resultExecutedContext = resultExecutedContext,
filter = filter
});
}
}
public static void BeforeOnResultExecuting(
this DiagnosticSource diagnosticSource,
ResultExecutingContext resultExecutingContext,
IResultFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.BeforeOnResultExecuting"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.BeforeOnResultExecuting",
new
{
actionDescriptor = resultExecutingContext.ActionDescriptor,
resultExecutingContext = resultExecutingContext,
filter = filter
});
}
}
public static void AfterOnResultExecuting(
this DiagnosticSource diagnosticSource,
ResultExecutingContext resultExecutingContext,
IResultFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.AfterOnResultExecuting"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.AfterOnResultExecuting",
new
{
actionDescriptor = resultExecutingContext.ActionDescriptor,
resultExecutingContext = resultExecutingContext,
filter = filter
});
}
}
public static void BeforeOnResultExecuted(
this DiagnosticSource diagnosticSource,
ActionDescriptor actionDescriptor,
ResultExecutedContext resultExecutedContext,
IResultFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.BeforeOnResultExecuted"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.BeforeOnResultExecuted",
new
{
actionDescriptor = actionDescriptor,
resultExecutedContext = resultExecutedContext,
filter = filter
});
}
}
public static void AfterOnResultExecuted(
this DiagnosticSource diagnosticSource,
ActionDescriptor actionDescriptor,
ResultExecutedContext resultExecutedContext,
IResultFilter filter)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.AfterOnResultExecuted"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.AfterOnResultExecuted",
new
{
actionDescriptor = actionDescriptor,
resultExecutedContext = resultExecutedContext,
filter = filter
});
}
}
public static void BeforeActionResult(
this DiagnosticSource diagnosticSource,
ActionContext actionContext,
IActionResult result)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.BeforeActionResult"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.BeforeActionResult",
new { actionContext = actionContext, result = result });
}
}
public static void AfterActionResult(
this DiagnosticSource diagnosticSource,
ActionContext actionContext,
IActionResult result)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.AfterActionResult"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.AfterActionResult",
new { actionContext = actionContext, result = result });
}
}
}
}

View File

@ -0,0 +1,41 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Diagnostics;
using Microsoft.AspNet.Http;
using Microsoft.AspNet.Mvc.Abstractions;
using Microsoft.AspNet.Routing;
namespace Microsoft.AspNet.Mvc.Diagnostics
{
public static class MvcRouteHandlerDiagnosticSourceExtensions
{
public static void BeforeAction(
this DiagnosticSource diagnosticSource,
ActionDescriptor actionDescriptor,
HttpContext httpContext,
RouteData routeData)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.BeforeAction"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.BeforeAction",
new { actionDescriptor, httpContext = httpContext, routeData = routeData });
}
}
public static void AfterAction(
this DiagnosticSource diagnosticSource,
ActionDescriptor actionDescriptor,
HttpContext httpContext,
RouteData routeData)
{
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.AfterAction"))
{
diagnosticSource.Write(
"Microsoft.AspNet.Mvc.AfterAction",
new { actionDescriptor, httpContext = httpContext, routeData = routeData });
}
}
}
}

View File

@ -7,6 +7,7 @@ using System.Threading.Tasks;
using Microsoft.AspNet.Http;
using Microsoft.AspNet.Mvc.Abstractions;
using Microsoft.AspNet.Mvc.Core;
using Microsoft.AspNet.Mvc.Diagnostics;
using Microsoft.AspNet.Mvc.Internal;
using Microsoft.AspNet.Mvc.Logging;
using Microsoft.AspNet.Mvc.Routing;
@ -85,12 +86,7 @@ namespace Microsoft.AspNet.Mvc.Infrastructure
{
context.RouteData = newRouteData;
if (_diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.BeforeAction"))
{
_diagnosticSource.Write(
"Microsoft.AspNet.Mvc.BeforeAction",
new { actionDescriptor, httpContext = context.HttpContext, routeData = context.RouteData });
}
_diagnosticSource.BeforeAction(actionDescriptor, context.HttpContext, context.RouteData);
using (_logger.ActionScope(actionDescriptor))
{
@ -102,12 +98,7 @@ namespace Microsoft.AspNet.Mvc.Infrastructure
}
finally
{
if (_diagnosticSource.IsEnabled("Microsoft.AspNet.Mvc.AfterAction"))
{
_diagnosticSource.Write(
"Microsoft.AspNet.Mvc.AfterAction",
new { actionDescriptor, httpContext = context.HttpContext, routeData = context.RouteData });
}
_diagnosticSource.AfterAction(actionDescriptor, context.HttpContext, context.RouteData);
if (!context.IsHandled)
{