Asp.net mvc 如何在ApiController构造之后但在操作执行之前运行方法?

Asp.net mvc 如何在ApiController构造之后但在操作执行之前运行方法?,asp.net-mvc,asp.net-web-api,Asp.net Mvc,Asp.net Web Api,我有一个ASP.NET Web API服务,我试图将有关请求的信息注入到“日志上下文”中,而不知道它们是Web服务的一部分的对象可以重用该上下文。目标是,记录的每条消息都与从生成它的请求中获取的一组数据点相关联 上下文本身很早就由消息处理程序生成,然后添加到Request.Properties。我遇到的问题是,在控制器构造函数中,尚未设置控制器上的Request属性,因此我无法检索上下文并使用它来适当配置日志记录 我想我可以用一个过滤器来实现它:在OnActionExecuting中,过滤器可以

我有一个ASP.NET Web API服务,我试图将有关请求的信息注入到“日志上下文”中,而不知道它们是Web服务的一部分的对象可以重用该上下文。目标是,记录的每条消息都与从生成它的请求中获取的一组数据点相关联

上下文本身很早就由消息处理程序生成,然后添加到
Request.Properties
。我遇到的问题是,在控制器构造函数中,尚未设置控制器上的
Request
属性,因此我无法检索上下文并使用它来适当配置日志记录

我想我可以用一个过滤器来实现它:在
OnActionExecuting
中,过滤器可以检查控制器是否实现了定义“PreAction”的接口,如果是,它可以调用该方法,但我不确定这是否重复了框架提供的功能


问题:是否有一种内置方法可以在构造函数运行且
请求
属性已填充之后,但在操作方法执行之前运行方法?

作为选项,您可以使用Microsoft Unity IoC容器并为此使用拦截功能。


  • 你可以用它截取任何方法。

    我认为
    OnActionExecuting
    ,无论是在属性上还是在控制器(或基本控制器)中重写,都是你正在寻找的管道钩子。
    OnActionExecuting
    钩子在
    ApiController
    中不可用;但事实并非如此。在我开始筛选之前,我正在尝试找出是否我错过了一种更“Web API”的方法来实现这一点。对不起,我没有意识到你说的是ApiController。