20

我创建了一个自定义 AuthorizeAttribute 来验证在 HTTP 标头中发送的一些 OAuth 凭据。我正在使用其中一些凭据来识别发出请求的人。一旦我在 AuthorizeAttribute 中解析了这些信息,有没有办法将其传递给控制器​​的实例变量?然后在我的控制器中的任何地方,我都会有请求方的 ID。

4

1 回答 1

16

原始答案

您应该能够在您的过滤器中执行此操作

filterContext.HttpContext.Items["test"] = "foo";

然后在你的行动中

_yourVariable = HttpContext.Items["test"];

您可能想要使用比 更独特的键"test",但这就是想法。

编辑我们在动作而不是构造函数中这样做有两个原因:

  1. Controller 的构造函数在 OnAuthorization 之前触发,因此尚未设置该项目。
  2. HttpContext 尚未在 Controller 的构造函数中设置。

替代解决方案

  1. 创建一个新的OAuthController : Controller
  2. 覆盖OnAuthorization
  3. 将过滤器中的逻辑移至OAuthController.OnAuthorization
  4. 在中设置一个protected字段(即protected object myAuthDataOAuthController
  5. 让您的其他控制器继承自OAuthController而不是Controller
  6. 您的其他控制器可以访问myAuthData.
于 2011-07-12T18:35:05.993 回答