如何将数据从 AuthorizeAttribute 传递到控制器?

发布于 2024-11-19 11:30:07 字数 170 浏览 2 评论 0原文

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

I have created a custom AuthorizeAttribute which verifies some OAuth credentials that are sent inside the HTTP header. I am using some of these credentials to identify who is making the request. Once I parse this information in the AuthorizeAttribute is there any way to pass it over so that the data can be assigned to an instance variable of the Controller? Then anywhere in my Controller I will have the ID of the requesting party.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我喜欢麦丽素 2024-11-26 11:30:07

原始答案

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

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

然后在您的操作中

_yourVariable = HttpContext.Items["test"];

您可能希望使用比“test”更唯一的键,但这就是想法。

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

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

替代解决方案

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

Original answer

You should be able to do this in your filter

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

And then this in your action

_yourVariable = HttpContext.Items["test"];

You'd probably want to use a more unique key than "test", but that's the idea.

EDIT There are two reasons we do this in the action rather than the constructor:

  1. A Controller's constructor fires before OnAuthorization, so the item will not yet be set.
  2. The HttpContext is not yet set in the Controller's constructor.

Alternative solution

  1. Create a new OAuthController : Controller
  2. Override OnAuthorization
  3. Move the logic from your filter into OAuthController.OnAuthorization
  4. Set a protected field (i.e., protected object myAuthData) in OAuthController
  5. Have your other controllers inherit from OAuthController instead of Controller
  6. Your other controllers can access myAuthData.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文