web-dev-qa-db-ja.com

ミドルウェア.Net Coreでコントローラーとアクションの名前を読み取る

リクエストデータをデータベースに記録するために、プロジェクト内にミドルウェアクラスを作成しています。

コントローラの名前とアクションを取得する簡単な方法がわかりません。これをコアで簡単に行うチャンスはありますか?

私はこのようなものを持っています:

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
    }       
}
10
Metalex

.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;
        }
    }
4
tarn

コントローラーとアクションのデータはフィルターを介して利用できるため、この方法で実装しました。コントローラとアクションのデータは、ActionExecutingContextオブジェクトで使用できます。

public class AsyncActionFilter : IAsyncActionFilter
{
     public AsyncActionFilter(IEntityContext entityContext)
     {
         _entityContext = entityContext;
     }

     public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
     {  
          //Handle the request
          await next();
     }
}
1
Metalex