MVC2: лучший способ перехватить ViewRequest и изменить ActionResult - PullRequest
1 голос
/ 19 марта 2010

Я создаю веб-приложение ASP.NET MVC2, которое требует сложной аутентификации и бизнес-логики, которые не могут быть достигнуты с использованием готовых форм аутентификации.

Я новичок в MVC, так что терпите меня ...

Мой план состоял в том, чтобы пометить все методы ограниченного просмотра одним или несколькими пользовательскими атрибутами (которые содержат дополнительные данные).

Затем контроллер переопределит метод OnActionExecuting, чтобы перехватывать запросы, анализировать атрибуты целевого представления и выполнять различные действия, в том числе перенаправлять пользователя в разные места.

У меня работает анализ перехвата и анализа атрибутов, но перенаправление работает не так, как ожидалось.

Я попытался установить для ActionExecutingContext.Result значение NULL и даже попытался подделать контроллеры с помощью отражения и вызвать их методы действия. Без кубиков.

Мне удалось добиться этого таким образом ...

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
     filterContext.HttpContext.Response.Redirect("/MyView", false);
     base.OnActionExecuting(filterContext);
}

Это похоже на взлом, и должен быть лучший способ ...

1 Ответ

2 голосов
/ 20 марта 2010

Прежде всего, ознакомьтесь с книгой Стива Сандерсона Pro ASP.Net MVC. Раздел о actionfilters и жизненном цикле контроллера важен для вас, в основном, потому что есть особый подход к фильтрам Authorize, которых не имеют «обычные» actionfilters.

Во-вторых, вы должны быть в состоянии сделать это:

filterContext.Result = new RedirectToRouteResult(/*params*/);

и получите желаемый эффект.

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