Глобальное перенаправление на основе логики в ASP.NET MVC3 - PullRequest
1 голос
/ 01 февраля 2012

Я создаю портал заявок на поддержку компьютеров ASP.NET MVC3.

Существует состояние обслуживания, в котором лучше всего запретить пользователям взаимодействовать с EF / Database, чтобы избежать "коллизий", которые я получаю в настоящее время.

У меня есть IMaintenanceDispatcher, у которого логическое свойство IsOnMaintenance установлено в true в соответствии с бизнес-логикой, когда фоновая логика переводит портал в это состояние.

Мне нужно перенаправить запросы клиентов на страницу парковки на время обслуживания.

Где я могу разместить логику, которая проверит, истинно ли IsOnMaintenance, и если да, сделать перенаправление на URL?

1 Ответ

1 голос
/ 01 февраля 2012

Вы можете поместить его в ActionFilterAttribute и применить этот атрибут к любым применимым действиям / контроллерам или глобально.

public class IsOnMaintenanceAttribute : ActionFilterAttribute
{
    //You'll need to setup your IoC to inject this
    public IMaintenanceDispatcher InjectedMaintenanceDispatcher { get; set; }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        object ticketIdObj;
        if (!filterContext.ActionParameters.TryGetValue("ticketId", out ticketIdObj))
            return;

        //Make sure it exists
        if (InjectedMaintenanceDispatcher.IsOnMaintenance(int.parse(ticketIdObj)))
        {
            var routeValues = new RouteValueDictionary(new {
                action = "parkingpage",
                controller = "maintenance",
                area = "ticket" });

            filterContext.Result = new RedirectToRouteResult(routeValues);
            return;
        }
    }
}

Обратите внимание, что параметры вашего метода действия должны содержать переменную с именем ticketId дляfilterContext.ActionParameters.TryGetValue для работы.

Примечание: я предполагал, что отдельный билет переведен в режим обслуживания, и вы хотели проверить это ... но перечитывая вопрос, кажется, что вы хотитеприостановить всю область / сайт.Даже в этом случае пример ActionFilterAttribute все еще остается ... просто не таким, как все.

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