Как заставить POST ActionHandler возвращать GET ActionHandler по пользовательскому атрибуту? - PullRequest
0 голосов
/ 18 июля 2011

Наша система проходит проверку подлинности 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, чтобы добавить эту функциональность.

Итак, мой вопрос:

Как мне добавить код для выполнения такой проверки в этом атрибуте?

1 Ответ

0 голосов
/ 23 сентября 2011

Пока что мы не нашли нужного решения и просто вставляем этот код (ну, вызов функции с этим кодом в нем) в начале КАЖДОГО контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...