Asp.net mvc .NET Core MVC获取日志中间件的匹配路由
在我的项目中,我使用日志中间件记录每个请求。如何获取与请求匹配的路由以用于日志记录 我在请求中有完整路径,例如/v1/User/123 但是我想记录这个:/v1/User/{id} 以下是我到目前为止的情况:Asp.net mvc .NET Core MVC获取日志中间件的匹配路由,asp.net-mvc,asp.net-core-mvc,asp.net-core-2.1,Asp.net Mvc,Asp.net Core Mvc,Asp.net Core 2.1,在我的项目中,我使用日志中间件记录每个请求。如何获取与请求匹配的路由以用于日志记录 我在请求中有完整路径,例如/v1/User/123 但是我想记录这个:/v1/User/{id} 以下是我到目前为止的情况: public async override Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { var path = context.ActionDe
public async override Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
var path = context.ActionDescriptor.AttributeRouteInfo.Template;
await next();
}
这是在我的基本控制器中,如何将其发送到日志中间件
下面是我如何将其发送到日志中间件的:
var actionInfo = context.Items["ActionInfo"];
if (actionInfo != null)
{
actionMatched = actionInfo.ToString();
}
基本控制器:
public async override Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
var actionPath = context.ActionDescriptor.AttributeRouteInfo.Template;
HttpContext.Items.Add("ActionInfo", actionPath);
await next();
}
日志中间件:
var actionInfo = context.Items["ActionInfo"];
if (actionInfo != null)
{
actionMatched = actionInfo.ToString();
}
有更好的方法吗?
此外,这仅在使用属性路由时有效。如果您在启动时注册路由,该如何工作?简单明了,您不能 路由是ASP.NET核心MVC概念,因此它的存在只能在ASP.NET核心的MVC中间件中找到。这就是为什么您可以从ActionFilter访问它,这也是ASP.NET核心MVC概念。从一个中间件中,您可以通过转到
httpContext.Request
并使用Path
/Query
/QueryString
/方法获得最接近的结果
了解这一点后,您可以选择:
将记录器实现为动作过滤器。这允许您轻松访问路线和其他详细信息,如控制器和操作方法。但是,在MVC中间件之外处理的请求(静态文件、授权失败、命名)将不会被记录
将其作为中间件实现,只需记录URL即可
将数据以某种方式存储在某个地方,以便中间件可以访问它,就像您通过向HttpContext
添加项所做的那样。这感觉很不舒服
选项1和2都是不错的选择,这取决于你的需要,哪一个最适合你。也许连1和2都有。好吧,简单明了,你不能
路由是ASP.NET核心MVC概念,因此它的存在只能在ASP.NET核心的MVC中间件中找到。这就是为什么您可以从ActionFilter访问它,这也是ASP.NET核心MVC概念。从一个中间件中,您可以通过转到httpContext.Request
并使用Path
/Query
/QueryString
/方法获得最接近的结果
了解这一点后,您可以选择:
将记录器实现为动作过滤器。这允许您轻松访问路线和其他详细信息,如控制器和操作方法。但是,在MVC中间件之外处理的请求(静态文件、授权失败、命名)将不会被记录
将其作为中间件实现,只需记录URL即可
将数据以某种方式存储在某个地方,以便中间件可以访问它,就像您通过向HttpContext
添加项所做的那样。这感觉很不舒服
选项1和2都是不错的选择,这取决于你的需要,哪一个最适合你。甚至可能是1和2