我有一个MVC 3网站,其中的内容存储在数据库(a.k.a. CMS)中。网站所有者不希望网站在编辑内容时部分运行。如果我使用“app_offline.htm”方法,则没有人可以登录和编辑内容。有什么其他方法呢?
答案 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
这是简单的代码,但它似乎运作良好。