Quantcast
Viewing all articles
Browse latest Browse all 2016

‫ایجاد فیلتر برای هدایت همه‌ی درخواست‌ها به صفحه‌ی «در حال به‌روزرسانی» در برنامه‌های ASP.NET MVC

مواقع زیادی اتفاق می‌افتد که باید کار خاصی، بر روی سایتی که publish شده انجام بدیم. مثلا قرار هست یک به‌روزرسانی انجام بدیم یا هر عملیات خاصی دیگری. در این موارد اگر بخواهیم کاربر نتواند وارد سایت شود، اما سایت برای خودمان باز باشد تا بتوانیم عملیاتی را انجام دهیم، فیلتری را می‌نویسیم که همه‌ی کاربران غیر از خودمان را به صفحه‌ی HTML ساده‌ای که قبلا طراحی کرده‌ایم، منتقل کند. مثلا در این صفحه نوشته شده «در حال بروز رسانی هستیم ...»

برای اینکار یک فیلتر جدید را می‌نویسیم؛ به صورت زیر:
 public sealed class DownForMaintenanceAttribute : ActionFilterAttribute
    {        
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var path = System.Web.Hosting.HostingEnvironment.MapPath("~/down.html");
            var ip = WebConfigurationManager.AppSettings["MaintenanceIp"];
            if (System.IO.File.Exists(path) &&  HttpContext.Current.Request.UserHostAddress !=  ip)
            {
                filterContext.HttpContext.Response.Clear();
                filterContext.HttpContext.Response.Redirect("~/down.html");
                return;
            }

            base.OnActionExecuting(filterContext);
        }
    }

ابتدا فایل HTML، در پوشه‌ی پروژه جستجو می‌شود. همچنین آدرس  ip ای که میتواند سایت را مشاهده کند، از web.config خوانده می‌شود. اگر چنین فایلی مثلا (down.html) در پروژه موجود بود، تمام درخواست‌هایی را که به سمت سایت میاید، به این صفحه هدایت می‌کنیم؛ غیر از درخواست‌هایی که از ip ذکر شده به سمت سایت می‌آیند (یعنی ip  خودمان).
کد web.config
<add key="MaintenanceIp" value="x.x.x.x" />
کد کلاس  Filter.Config
 filters.Add(new DownForMaintenanceAttribute());

Viewing all articles
Browse latest Browse all 2016

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>