Я создал настраиваемый атрибут 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.