显示一个快速维护页面(但仍然允许我访问应用程序)-快速修复

本文关键字:访问 允许我 应用程序 一个 维护 显示 | 更新日期: 2023-09-27 18:03:37

我想要一个真正快速的修复,以防止所有访问一个网站,除非网址有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中,请求此时为空。

有什么快速解决办法吗?

显示一个快速维护页面(但仍然允许我访问应用程序)-快速修复

可以覆盖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();
    }
}

注意:如果适合的话,您可以在Action过滤器中移动此行为