我正在我的项目中编写一个中间件类,以便将请求数据记录到我们的数据库中。
我没有看到任何简单的方法来获取控制器名称和操作?
有机会在核心中轻松做到这一点吗?
我有这样的事情:
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 3.1 中对我有用:
public async Task InvokeAsync(HttpContext httpContext)
{
var controllerActionDescriptor = httpContext
.GetEndpoint()
.Metadata
.GetMetadata<ControllerActionDescriptor>();
var controllerName = controllerActionDescriptor.ControllerName;
var actionName = controllerActionDescriptor.ActionName;
await _next(httpContext);
}
为了GetEndpoint()
要返回实际端点而不是 null,必须满足以下条件。
- 启用端点路由(
AddControllers()
代替AddMvc()
)
- 之间调用你的中间件
UseRouting()
and UseEndpoints()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)