اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
یک دقیقه
پروژهی «فروشگاه شهر طلایی من» را اگر در برنامهی DNTProfiler بررسی کنیم، در برگهی Urls آن یک چنین گزارشهایی را میتوان مشاهده کرد:
همانطور که مشاهده میکنید، درخواست یک فایل استاتیک، سبب اجرای یک کوئری بر روی بانک اطلاعاتی شدهاست و یک Context خاص خودش را نیز ایجاد کردهاست. اگر به قسمت سابقهی متدهایی که سبب بروز این امر شدهاند (در همان برگه، در پایین صفحه) دقت کنیم، به متد Application_AuthenticateRequest فایل global.asax.cs میرسیم. هر چند در فایل RouteConfig.cs مسیرهای اسکریپتها و فایلهای CSS جهت صرفنظر شدن معرفی شدهاند، اما این موارد بر روی متد خاص Application_AuthenticateRequest تاثیری ندارند و این متد به ازای هر درخواست رسیدهی به IIS یکبار اجرا میشود؛ زیرا یک چنین تنظیمی در فایل web.config وجود دارد:
به همین دلیل است که حتی درخواست فایلهای استاتیک نیز سبب اجرای ماژول forms authentication و بروز صدور یک کوئری شدهاند.
کنترل ASP.NET MVC Bundles در حین Forms Authentication
اگر بخواهیم درخواستهای رسیدهی به Application_AuthenticateRequest را کنترل کنیم، میتوان چنین متدی را تدارک دید:
در اینجا یک سری مسیر مشخص مانند پوشهی تصاویر، قلمها و اسکریپتها و امثال آن معرفی شدهاند. همچنین BundleTable.Bundles نیز مورد بررسی قرار گرفتهاست. در حین استفادهی از ASP.NET MVC Bundles دیگر مسیرها الزاما به پوشهی Content ختم نخواهند شد:
و بر اساس تعریف پارامتر bundles/modernizer/~ مسیری مانند localhost/bundles/modernizer درخواست خواهد شد. برای دسترسی به این مسیرهای سفارشی تعریف شده میتوان از مجموعهی BundleTable.Bundles، مطابق متد فوق کوئری گرفت و مسیرهای درخواستی را که با مسیرهای bundles سفارشی تعریف شده تطابق دارند، دیگر پردازش نکرد:
همانطور که مشاهده میکنید، درخواست یک فایل استاتیک، سبب اجرای یک کوئری بر روی بانک اطلاعاتی شدهاست و یک Context خاص خودش را نیز ایجاد کردهاست. اگر به قسمت سابقهی متدهایی که سبب بروز این امر شدهاند (در همان برگه، در پایین صفحه) دقت کنیم، به متد Application_AuthenticateRequest فایل global.asax.cs میرسیم. هر چند در فایل RouteConfig.cs مسیرهای اسکریپتها و فایلهای CSS جهت صرفنظر شدن معرفی شدهاند، اما این موارد بر روی متد خاص Application_AuthenticateRequest تاثیری ندارند و این متد به ازای هر درخواست رسیدهی به IIS یکبار اجرا میشود؛ زیرا یک چنین تنظیمی در فایل web.config وجود دارد:
<modules runAllManagedModulesForAllRequests="true">
کنترل ASP.NET MVC Bundles در حین Forms Authentication
اگر بخواهیم درخواستهای رسیدهی به Application_AuthenticateRequest را کنترل کنیم، میتوان چنین متدی را تدارک دید:
private bool shouldIgnoreRequest() { string[] reservedPath = { "/__browserLink", "/img", "/fonts", "/Scripts", "/Content" }; var rawUrl = Context.Request.RawUrl; if (reservedPath.Any(path => rawUrl.StartsWith(path, StringComparison.OrdinalIgnoreCase))) { return true; } return BundleTable.Bundles.Select(bundle => bundle.Path.TrimStart('~')) .Any(bundlePath => rawUrl.StartsWith(bundlePath, StringComparison.OrdinalIgnoreCase)); }
bundles.Add(new ScriptBundle("~/bundles/modernizr").Include( "~/Scripts/modernizr-*"));
protected void Application_AuthenticateRequest(Object sender, EventArgs e) { if (shouldIgnoreRequest()) return; if (Context.User == null) return;