我创建了一个自定义 AuthorizeAttribute 来验证在 HTTP 标头中发送的一些 OAuth 凭据。我正在使用其中一些凭据来识别发出请求的人。一旦我在 AuthorizeAttribute 中解析了这些信息,有没有办法将其传递给控制器的实例变量?然后在我的控制器中的任何地方,我都会有请求方的 ID。
问问题
6115 次
1 回答
16
原始答案
您应该能够在您的过滤器中执行此操作
filterContext.HttpContext.Items["test"] = "foo";
然后在你的行动中
_yourVariable = HttpContext.Items["test"];
您可能想要使用比 更独特的键"test"
,但这就是想法。
编辑我们在动作而不是构造函数中这样做有两个原因:
- Controller 的构造函数在 OnAuthorization 之前触发,因此尚未设置该项目。
- HttpContext 尚未在 Controller 的构造函数中设置。
替代解决方案
- 创建一个新的
OAuthController : Controller
- 覆盖
OnAuthorization
- 将过滤器中的逻辑移至
OAuthController.OnAuthorization
- 在中设置一个
protected
字段(即protected object myAuthData
)OAuthController
- 让您的其他控制器继承自
OAuthController
而不是Controller
- 您的其他控制器可以访问
myAuthData
.
于 2011-07-12T18:35:05.993 回答