MVC 3的“app_offline.htm”

时间:2012-01-30 22:10:03

标签: asp.net-mvc-3

我有一个MVC 3网站,其中的内容存储在数据库(a.k.a. CMS)中。网站所有者不希望网站在编辑内容时部分运行。如果我使用“app_offline.htm”方法,则没有人可以登录和编辑内容。有什么其他方法呢?

1 个答案:

答案 0 :(得分:0)

我通常创建一个保持页面机制,该机制将查看是否已设置特定cookie。在过去,我通过创建一个HttpModule来完成这个,但是最近我使用了一个ActionFilter,所以我可以微调我希望锁定的控制器。设置好cookie后,您可以正常使用您的网站。

public class CookieProtectAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (WebSettings.HoldingPageOn) //Helper to check web.config if holding page is active
        { //Make sure you don't go into an infinite loop - ideally the holding page controller wont have the cookie protect action filter
            if (!filterContext.HttpContext.Request.RawUrl.ToLower().Contains("holding"))
            {
                var accessCookie = filterContext.HttpContext.Request.Cookies["AllowAccess"];
                if (accessCookie == null)
                {
                    filterContext.Result = new RedirectToRouteResult("Holding", null, false);
                    filterContext.Result.ExecuteResult(filterContext);
                }
            }
        }

        base.OnActionExecuting(filterContext);
    }
}

然后设置cookie我会将特定路由连接到动作方法,例如......

[HttpGet]
    public ActionResult HoldingAccess(string id)
    {
        if (id.NullSafe() == "yourpassword")
        {
            Response.Cookies.Add(new HttpCookie("AllowAccess") {Expires = DateTime.Now.AddDays(7)});
            return RedirectToRoute("Home");
        }
        return HttpNotFound();
    }

因此,您设置cookie的路径可以是任何内容,在上面的示例中,您可以设置硬编码的“密码” - 即/ OpenSesame / yourpassword路由会设置cookie

这是简单的代码,但它似乎运作良好。