Я создал настраиваемый атрибут AuthorizeAttribute, который проверяет некоторые учетные данные OAuth, которые отправляются внутри HTTP-заголовка. Я использую некоторые из этих учетных данных, чтобы определить, кто делает запрос. Как только я проанализирую эту информацию в AuthorizeAttribute, есть ли способ передать ее, чтобы данные могли быть назначены переменной экземпляра контроллера? Тогда где-нибудь в моем контроллере у меня будет ID запрашивающей стороны.
Как передать данные из атрибута AuthorizeAttribute в контроллер?
Ответ 1
Оригинальный ответ
Вы должны иметь возможность сделать это в своем фильтре
filterContext.HttpContext.Items["test"] = "foo";
И затем этот в вашем действии
_yourVariable = HttpContext.Items["test"];
Вероятно, вы захотите использовать более уникальный ключ, чем "test"
, но эту идею.
РЕДАКТИРОВАТЬ Есть две причины, по которым мы делаем это в действии, а не в конструкторе:
- Конструктор Controller запускается перед OnAuthorization, поэтому элемент еще не будет установлен.
- HttpContext еще не установлен в конструкторе Controller.
Альтернативное решение
- Создайте новый
OAuthController : Controller
- Переопределить
OnAuthorization
- Переместите логику из вашего фильтра в
OAuthController.OnAuthorization
- Установите поле
protected
(т.е.protected object myAuthData
) вOAuthController
- Попросите другие контроллеры наследовать от
OAuthController
вместоController
- Ваши другие контроллеры могут получить доступ к
myAuthData
.