我知道我们可以简单地使用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