2011-09-28 21 views
10

मुझे पता है कि हम इसे करने के लिए बस app_offline.htm फ़ाइल का उपयोग कर सकते हैं।"रखरखाव के लिए नीचे" पृष्ठ लागू करें

लेकिन यदि मेरा आईपी 1.2.3.4 (उदाहरण के लिए) है तो मैं वेबसाइट तक पहुंचने में सक्षम होना चाहता हूं, ताकि मैं अंतिम परीक्षण कर सकूं।

if(IpAddress != "1.2.3.4") 
{ 
    return Redirect(offlinePageUrl); 
} 

हम इसे एएसपी.नेट एमवीसी 3 में कैसे कार्यान्वित कर सकते हैं?

+0

आप अभी भी आईआईएस का उपयोग करके ऐसा कर सकते हैं। एक अलग होस्ट नाम के साथ एक नई साइट सेट करें जो बाध्यकारी है जो रीडायरेक्ट नहीं करता है। "तैनाती" सामान के साथ अपने कोड को दबाने की जरूरत नहीं है। :) – bzlm

+0

@bzlm हमने पहले से ही विभिन्न होस्ट नाम के साथ परीक्षण किया है। हमें वास्तविक होस्ट नाम के साथ फिर से अंतिम परीक्षण करने की आवश्यकता है। –

+0

मैं देख सकता हूं कि यह भी हो रहा है। – bzlm

उत्तर

14

आप आईपी चेक के साथ एक RouteConstraint साथ एक कैच-ऑल मार्ग का उपयोग कर सकते हैं:

सुनिश्चित करें कि आप पहले ऑफ़लाइन मार्ग डाल सुनिश्चित करें।

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"; 
    } 
} 
+0

बहुत साफ समाधान। वास्तव में मुझे क्या चाहिए। धन्यवाद। – nrod

+0

@ रिकार्ड, लाइव शॉपिंग साइट पर उपयोगकर्ता त्रुटि के साथ प्रभावित होते हैं जब मैं प्रोजेक्ट में कोड परिवर्तन अपडेट करने के लिए 'डीएलएल' अपलोड करता हूं, तो रखरखाव सहायता के लिए नीचे आ जाएगा? या [statuspage.io] (https://www.statuspage.io/) भुगतान सेवा? यहां समान [मुद्दे] पर चर्चा है (http://programmers.stackexchange.com/questions/238767/asp-net-deployment-maintenance-best-practices) – stom

2

आप अगर वे आपके आईपी से नहीं आते हैं एक वैश्विक फिल्टर है कि सभी को रोकने का निवेदन परिभाषित कर सकते हैं। आप कॉन्फ़िगरेशन द्वारा फ़िल्टर सक्षम कर सकते हैं।

13

प्रति मैक्स का सुझाव यहां एक वास्तविक कार्यान्वयन है।

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); 
    } 


} 
2

मुझे colemn615 के समाधान पर एक अनंत लूप मिला, इसलिए मैंने ऑफ़लाइन पृष्ठ के लिए एक चेक जोड़ा।

इसके अलावा, एएसपी.नेट के बाद के संस्करणों के लिए इसे 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); 
    } 
} 
संबंधित मुद्दे