我有一些代码需要在每个 API 方法被命中之前运行;这方面的逻辑返回一个轻量级对象,它是每个 API 方法的依赖项。
有没有办法在 ActionFilterAttribute (依赖注入)中从 OnActionExecuting 返回一个值,供所有控制器 API 方法共同使用,而无需在每个控制器方法中包含代码?
简而言之,这是我的结构:
Public Class APIRequestValidator
Inherits System.Web.Http.Filters.ActionFilterAttribute
Public Overrides Sub OnActionExecuting(ByVal actionContext As HttpActionContext)
可以这样注入 API 控制器:
Namespace Controllers
<APIRequestValidator>
Public Class LoginController
Inherits BaseController
我做了一些研究,发现从 OnActionExecuting 方法中我们可以返回如下响应:
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.OK, New With {
.foo= fooobj
}, actionContext.ControllerContext.Configuration.Formatters.JsonFormatter)
我的问题是:
- 如何从主控制器方法中提取 foo ?
- 更重要的是,是否有一些可以从控制器方面使用的概念,它不需要在每个 API 方法中使用拦截代码(冗余代码在可维护性方面不是一个好主意!)?基本上,我想从 OnActionExecuting 返回一个对象并将其存储为一个公共属性,供所有 API 方法共同使用。(想到的第一个想法是在构造函数中包含这个逻辑,但事实证明构造函数在 OnActionExecuting 之前运行,这对我不起作用。)
- 它是否需要是对象的 JSON 表示?理想情况下,它将是原始类型的对象,项目已经知道并且已经在所有控制器中使用。