간단히 app_offline.htm 파일을 사용하면됩니다."유지 관리를 위해 다운"페이지 구현
하지만 내 IP가 1.2.3.4 (예 :) 인 경우 웹 사이트에 액세스 할 수 있기 때문에 최종 테스트를 수행 할 수 있습니다.
if(IpAddress != "1.2.3.4")
{
return Redirect(offlinePageUrl);
}
어떻게 이것을 ASP.NET MVC 3에 구현할 수 있습니까?
간단히 app_offline.htm 파일을 사용하면됩니다."유지 관리를 위해 다운"페이지 구현
하지만 내 IP가 1.2.3.4 (예 :) 인 경우 웹 사이트에 액세스 할 수 있기 때문에 최종 테스트를 수행 할 수 있습니다.
if(IpAddress != "1.2.3.4")
{
return Redirect(offlinePageUrl);
}
어떻게 이것을 ASP.NET MVC 3에 구현할 수 있습니까?
당신은 IP 체크와 RouteConstraint와 포괄 경로를 사용할 수 있습니다
가 먼저 오프라인 경로를 넣어 있는지 확인하십시오.
routes.MapRoute("Offline", "{controller}/{action}/{id}",
new
{
action = "Offline",
controller = "Home",
id = UrlParameter.Optional
},
new { constraint = new OfflineRouteConstraint() });
및 제약 코드 : 그들은 당신의 IP에서 오지 않는 경우
public class OfflineRouteConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
// return IpAddress != "1.2.3.4";
}
}
매우 깨끗한 용액. 정확히 내가 필요로하는 것을합니까? 감사. – nrod
@Rickard, 라이브 쇼핑 사이트 사용자는 프로젝트의 코드 변경 사항을 업데이트하기 위해'.DLL '을 업로드 할 때 오류가 발생하므로 유지 관리 도움을받을 수 있습니까? 또는 [statuspage.io] (https://www.statuspage.io/) 유료 서비스? 여기 비슷한 [issue] (http://programmers.stackexchange.com/questions/238767/asp-net-deployment-maintenance-best-practices)에 대한 토론이 있습니다. – stom
당신은 모든 요청을 중지 글로벌 필터를 정의 할 수 있습니다. 구성별로 필터를 활성화 할 수 있습니다.
여기 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);
}
}
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