Внедрить страницу "Вниз для обслуживания"
Я знаю, что мы могли бы просто использовать файл app_offline.htm для этого.
Но я хочу иметь доступ к веб-сайту, если мой IP-адрес 1.2.3.4 (например), чтобы я мог выполнить окончательное тестирование.
if( IpAddress != "1.2.3.4" )
{
return Redirect( offlinePageUrl );
}
Как мы можем реализовать это в ASP.NET MVC 3?
Ответы
Ответ 1
Вы можете использовать весь маршрут с маркером 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";
}
}
Ответ 2
В предположении Max Max это реальная реализация.
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);
}
}
Ответ 3
Вы можете определить глобальный фильтр, который останавливает все запросы, если они не поступают с вашего IP-адреса. вы можете включить фильтр по конфигурации.
Ответ 4
У меня есть бесконечный цикл для решения colemn615, поэтому я добавил проверку для автономной страницы.
Кроме того, для более поздних версий ASP.NET это разбивается на файл FilterConfig.cs в папке App_Start.
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);
}
}