显示快速维护页面(但仍允许自己访问应用程序) - 快速修复

时间:2015-07-20 10:02:07

标签: c# asp.net-mvc

我想要一个非常快速的解决办法来阻止对网站的所有访问,除非网址中包含dev=passcode

我尝试创建一个BaseController:

public class BaseController : Controller
{                
    public BaseController()
    {            
        if( Request.Params[ "dev" ] != "something" )
        {
            this.MaintenancePage();
        }
    }

    public ActionResult MaintenancePage()
    {
        return View();
    }
}

然后每个其他控制器都会脱离它。

class HomeController : BaseController
{
    private IUnitOfWork unitOfWork;

    public HomeController( IUnitOfWork uow ){..}

    public ActionResult Index(){...}
}

问题在于,在BaseController上,此时请求为空。

有任何快速解决方法吗?

1 个答案:

答案 0 :(得分:1)

您可以覆盖OnActionExecuting。这里将创建Request,并且在控制器中的任何操作之前将调用OnActionExecuting

public class BaseController : Controller
{                
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        string actionName = filterContext.ActionDescriptor.ActionName;
        if( Request.Params["dev"] != "something" && !String.Compare(actionName, "MaintenancePage", StringComparison.InvariantCultureIgnoreCase))
        {
            filterContext.Result = RedirectToAction("MaintenancePage");
        }
    }

    public ActionResult MaintenancePage()
    {
        return View();
    }
}

注意:如果更适合,您可以在“操作”过滤器中移动此行为。