リクエストデータをデータベースに記録するために、プロジェクト内にミドルウェアクラスを作成しています。
コントローラの名前とアクションを取得する簡単な方法がわかりません。これをコアで簡単に行うチャンスはありますか?
私はこのようなものを持っています:
public class RequestResponseLoggingMiddleware
{
private readonly RequestDelegate _next;
public RequestResponseLoggingMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
//handle the request
//something like: context.GetRouteData();
await _next(context);
//handle the response
}
}
.NET Core 2.0では、これをフィルターで行うことができます。
public class AuthorizationFilter : IAsyncAuthorizationFilter
{
public async Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
var controllerActionDescriptor = context.ActionDescriptor as ControllerActionDescriptor;
string controllerName = controllerActionDescriptor?.ControllerName;
string actionName = controllerActionDescriptor?.ActionName;
}
}
コントローラーとアクションのデータはフィルターを介して利用できるため、この方法で実装しました。コントローラとアクションのデータは、ActionExecutingContextオブジェクトで使用できます。
public class AsyncActionFilter : IAsyncActionFilter
{
public AsyncActionFilter(IEntityContext entityContext)
{
_entityContext = entityContext;
}
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
//Handle the request
await next();
}
}