我创建了一个自定义 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 回答