【发布时间】:2021-06-07 10:33:12
【问题描述】:
我正在.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 ...
}
【问题讨论】:
-
HTTPContext 是 HTML 标记的文本数据。您必须解析 HTML 以获取标签名称。标签名称可能与控制器名称不匹配。
-
你的目的是什么?您真的需要 pre-route 获取控制器和操作信息吗?我的意思是,如果您将代码 放在
await next ..之后,您可能有更好的机会获得此类信息,尤其是与过滤器结合使用时。尝试在到达 MVC 中间件之前获取此类信息非常困难,MVC 中间件中有很多逻辑,您几乎需要相同的逻辑来获取所需的信息。对于非属性路由,比较容易,但是对于属性路由,就很复杂了。 -
@KingKing 在互联网上搜索后,我知道对于控制器/动作相关的登录,最好使用动作过滤器。我有一个经典的 asp.net 过滤器,我使用它进行了修改,它借助了块读取和可回收内存的使用。
标签: c# asp.net-core asp.net-core-2.2