我想要一个非常快速的解决办法来阻止对网站的所有访问,除非网址中包含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上,此时请求为空。
有任何快速解决方法吗?
答案 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();
}
}
注意:如果更适合,您可以在“操作”过滤器中移动此行为。