在中间件中获取控制器的类型信息(或者如何对web api和页面进行不同的请求)

问题描述 投票:0回答:1

我想创建中间件来处理异常但是对api控制器和razor pages / mvc的不同请求。在中间件中,我只有一个context.Request.Path url,想要“找到”一个被分配来处理请求的控制器(或页面),然后分析它的类型信息并做出决定。

像这样的东西:

MyExceptionHandlerMiddleware{
   public async Task Invoke(HttpContext context)
   {
       try
       {
          await _next(context);
       }
       catch (Exception ex)
       {
           var path = context.Request.Path;
           var isApiCall = ... ???? 
           if ( isApiCall   )
           {
              var json = GetJson(ex);
              wait context.Response.WriteAsync(json); // return json
           } 
           else {
              await _options.ExceptionHandler(context); // return the page
           }
       }
   }
}

问题是此时似乎常规路由信息不可用。如何获取控制器的类型信息?

如何在中间件的上下文中区分对web api和页面的调用?

c# asp.net-core asp.net-core-2.2 asp.net-core-routing
1个回答
1
投票

不知道你为什么要这样做。您可以使用Asp.Net Core中内置的UseExceptionHandler()中间件并使用它的Path属性来获取路径信息

var path = HttpContext.Features.Get<IExceptionHandlerPathFeature>()?.Path;
© www.soinside.com 2019 - 2024. All rights reserved.