Наша система проходит проверку подлинности MVC2 в ADFS 2. Поэтому, когда пользователь нажимает на закладку для http://www.foo.com/Car/Details/3
, он попадает в наш контроллер Car
и вызывает наш обработчик действия Details
GET и передает 3 в качестве идентификатора (все основные вещи MVC). Итак, у нас есть ActionHandler, украшенный атрибутом [Authorize]
, и ADFS2 подключен, поэтому страница перенаправляется на наш сервер аутентификации, который затем перенаправляет обратно в наше приложение, но с POST (все базовые функции ADFS). Проблема в том, что это перенаправление является POST, и поэтому вызывается наш обработчик Details
POST, но, очевидно, он не содержит данных, которые мне нужны.
Теперь я идентифицировал некоторый код, который обнаруживает этот сценарий, и этот код выглядит примерно так:
[Authorize]
[MySpecialHttpGet]
public ActionResult Details(long id)
{
var model = GetModel(id);
return View(model);
}
[Authorize]
[MySpecialHttpPost]
public ActionResult Details(long id, ViewModel model)
{
/***START OF SPECIAL CODE***/
// If we were posted to by ADFS, redirect to the GET handler.
if (Request.Form["wa"] != null && Request.Form["wa"].ToLower().Contains("signin"))
{
// We were posted to here but need to respond with the GET view.
return Redirect(Request.Url.AbsoluteUri);
}
/***END OF SPECIAL CODE***/
var result = Something.SaveData(model);
return result.ActionResultToReturnWith;
}
Проблема в том, что мне нужно делать это на каждом POST ActionHandler в приложении, и я действительно не хочу этого делать. Учитывая, что у меня уже есть настраиваемые атрибуты во всех этих ActionHandlers, я хотел бы использовать эти атрибуты для внедрения этой функциональности для меня.
Теперь MySpecialHttpGet
и MySpecialHttpPost
не являются чем-то невероятно особенным, о чем вам действительно нужно знать, кроме как они расширяют ActionMethodSelectorAttribute
. Я хотел бы добавить код в атрибут MySpecialPost
, чтобы добавить эту функциональность.
Итак, мой вопрос:
Как мне добавить код для выполнения такой проверки в этом атрибуте?