Вы можете поместить его в 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
все еще остается ... просто не таким, как все.