Как передать данные из атрибута AuthorizeAttribute в контроллер?

Я создал настраиваемый атрибут AuthorizeAttribute, который проверяет некоторые учетные данные OAuth, которые отправляются внутри HTTP-заголовка. Я использую некоторые из этих учетных данных, чтобы определить, кто делает запрос. Как только я проанализирую эту информацию в AuthorizeAttribute, есть ли способ передать ее, чтобы данные могли быть назначены переменной экземпляра контроллера? Тогда где-нибудь в моем контроллере у меня будет ID запрашивающей стороны.

Ответы

Ответ 1

Оригинальный ответ

Вы должны иметь возможность сделать это в своем фильтре

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

И затем этот в вашем действии

_yourVariable = HttpContext.Items["test"];

Вероятно, вы захотите использовать более уникальный ключ, чем "test", но эту идею.

РЕДАКТИРОВАТЬ Есть две причины, по которым мы делаем это в действии, а не в конструкторе:

Альтернативное решение

  • Создайте новый OAuthController : Controller
  • Переопределить OnAuthorization
  • Переместите логику из вашего фильтра в OAuthController.OnAuthorization
  • Установите поле protected (т.е. protected object myAuthData) в OAuthController
  • Попросите другие контроллеры наследовать от OAuthController вместо Controller
  • Ваши другие контроллеры могут получить доступ к myAuthData.