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

Met*_*uru 14 asp.net-mvc controller authorize-attribute

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

Dav*_*tka 12

原始答案

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

filterContext.HttpContext.Items["test"] = "foo";
Run Code Online (Sandbox Code Playgroud)

然后在你的行动中

_yourVariable = HttpContext.Items["test"];
Run Code Online (Sandbox Code Playgroud)

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

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

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

替代方案

  1. 创建一个新的 OAuthController : Controller
  2. 覆盖 OnAuthorization
  3. 将过滤器中的逻辑移动到 OAuthController.OnAuthorization
  4. 设置一个protected字段(即protected object myAuthData)OAuthController
  5. 让你的其他控制器继承OAuthController而不是Controller
  6. 您的其他控制器可以访问myAuthData.