如何将AuthorizeAttribute中的数据传递给Controller?

时间:2011-07-12 18:09:06

标签: asp.net-mvc controller authorize-attribute

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

1 个答案:

答案 0 :(得分:12)

原始回答

您应该可以在过滤器中执行此操作

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

然后在你的行动中

_yourVariable = HttpContext.Items["test"];

您可能希望使用比"test"更独特的密钥,但这就是主意。

编辑我们在操作中执行此操作有两个原因而不是构造函数:

  1. A Controller's constructor fires before OnAuthorization,因此该项目尚未设置。
  2. HttpContext尚未在Controller的构造函数中设置。
  3. 替代解决方案

    1. 制作新的OAuthController : Controller
    2. 覆盖OnAuthorization
    3. 将过滤器中的逻辑移至OAuthController.OnAuthorization
    4. protected
    5. 中设置protected object myAuthData字段(即OAuthController
    6. 让您的其他控制器继承自OAuthController而不是Controller
    7. 您的其他控制器可以访问myAuthData