Как я могу передать данные из AuthorizeAttribute в контроллер? - PullRequest
14 голосов
/ 12 июля 2011

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

1 Ответ

12 голосов
/ 12 июля 2011

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

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

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

А потом это в вашем действии

_yourVariable = HttpContext.Items["test"];

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

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

  1. Конструктор контроллера срабатывает перед OnAuthorization , поэтому элемент еще не будет установлен.
  2. HttpContext еще не установлен в конструкторе контроллера.

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

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