问题描述
我正在 .net core 2.2 中编写一个中间件。我想在中间件中获取操作名称和控制器名称。
我无法使用 ControllerContext
,因为当时它不可用。
这是核心 3.1 Read Controller and Action name in middleware .Net Core
public async Task Invoke(HttpContext context)
{
await LogRequest(context);
await LogResponse(context);
}
private async Task LogResponse(HttpContext context)
{
ServiceName = context ...
}
解决方法
由于您使用的是 .net core 2.2,您只能从中获取路径并获取控制器名称和操作名称:
var RouteData = context.Request.Path.Value.Split("/");
var controllerName=RouteData[1];
var ActionName=RouteData[2];
如果你有区域,你需要使用:
var RouteData = context.Request.Path.Value.Split("/");
var controllerName=RouteData[2];
var ActionName=RouteData[3];
.net core 3.0 之后,您可以使用HttpRequest.RouteValues:
string actionName = context.Request.RouteValues["action"].ToString();
string controllerName = context.Request.RouteValues["controller"].ToString();