我知道我們可以簡單地使用app_offline.htm文件來執行此操作。執行「Down for maintenance」頁面
但我希望能夠訪問網站,如果我的IP是1.2.3.4(例如),以便我可以做最後的測試。
if(IpAddress != "1.2.3.4")
{
return Redirect(offlinePageUrl);
}
我們如何在ASP.NET MVC 3中實現這個?
我知道我們可以簡單地使用app_offline.htm文件來執行此操作。執行「Down for maintenance」頁面
但我希望能夠訪問網站,如果我的IP是1.2.3.4(例如),以便我可以做最後的測試。
if(IpAddress != "1.2.3.4")
{
return Redirect(offlinePageUrl);
}
我們如何在ASP.NET MVC 3中實現這個?
您可以使用一個包羅萬象的路線與RouteConstraint與IP檢查:
確保你先放離線路徑。
routes.MapRoute("Offline", "{controller}/{action}/{id}",
new
{
action = "Offline",
controller = "Home",
id = UrlParameter.Optional
},
new { constraint = new OfflineRouteConstraint() });
和約束代碼:
public class OfflineRouteConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
// return IpAddress != "1.2.3.4";
}
}
您可以定義一個全局過濾器,阻止所有的請求,如果他們不從你的IP來。您可以通過配置啓用過濾器。
每馬克斯的建議在這裏是一個實際的實施。
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new CheckForDownPage());
}
//the rest of your global asax
//....
}
public sealed class CheckForDownPage : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var path = System.Web.Hosting.HostingEnvironment.MapPath("~/Down.htm");
if (System.IO.File.Exists(path) && IpAddress != "1.2.3.4")
{
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.Redirect("~/Down.htm");
return;
}
base.OnActionExecuting(filterContext);
}
}
我在colemn615的解決方案上得到了一個無限循環,所以我添加了一個離線頁面檢查。
此外,對於ASP.NET的更高版本,這將分成App_Start文件夾中的FilterConfig.cs文件。
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new CheckForDownPage());
}
public sealed class CheckForDownPage : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (HttpContext.Current.Request.RawUrl.Contains("Down.htm"))
{
return;
}
var path = System.Web.Hosting.HostingEnvironment.MapPath("~/Down.htm");
if (System.IO.File.Exists(path) && IpAddress != "1.2.3.4")
{
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.Redirect("~/Down.htm");
return;
}
base.OnActionExecuting(filterContext);
}
}
您仍然可以使用IIS進行此操作。使用不重定向的不同主機名綁定來設置新站點。不需要用「部署」東西來污染你的代碼。 :) – bzlm
@bzlm我們已經用不同的主機名進行了測試。我們需要再次用真正的主機名進行最終測試。 –
我可以看到發生這種情況。 – bzlm