حذف پردازش درخواستهای فایلهای استاتیک در متد Application_AuthenticateRequest
نویسنده: وحید نصیری
تاریخ: ۱۳۹۴/۰۱/۰۷ ۱۶:۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
<modules runAllManagedModulesForAllRequests="true">
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;
همونطور که مشاهده میکنید درخواستها درست است در Application_AuthenticateRequest رد میشن ولی در اینجا نیز فراخوانی میشن و یا به عبارتی یک کوئری برای هر فایل استایک روی بانک اجرا میشه.
واقعیت امر اینه اصلا نمیدونم چرا این اتفاق رخ میده ولی یک متد با کدهای شما در کلاس CustomSecurityStampValidator قرار دادم و فراخوانی کردم اون رو و مشکل حل شد و دیگه درخواستی ارسال نمیشه و همهی درخواستهای فایلهای مورد نظر رد میشن. به این نحو :
private static bool ShouldIgnoreRequest(CookieValidateIdentityContext context)
{
string[] reservedPath =
{
"/__browserLink",
"/img",
"/fonts",
"/Scripts",
"/Content",
"/Uploads",
"/Images"
};
return reservedPath.Any(
path => context.OwinContext.Request.Path.Value.StartsWith(path, StringComparison.OrdinalIgnoreCase)) ||
BundleTable.Bundles.Select(bundle => bundle.Path.TrimStart('~'))
.Any(
bundlePath =>
context.OwinContext.Request.Path.Value.StartsWith(bundlePath,
StringComparison.OrdinalIgnoreCase));
} //...
if (ShouldIgnoreRequest(context)) return;
var manager = context.OwinContext.GetUserManager<ApplicationUserManager>();
var userId = getUserIdCallback(context.Identity);
//...
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
// ...
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = context =>
{
if(shouldIgnoreRequest(context)) // How to ignore Authentication Validations for static files in ASP.NET Identity
{
return Task.FromResult(0);
}
return container.GetInstance<IApplicationUserManager>().OnValidateIdentity().Invoke(context);
}
},
// ...
}); private static bool shouldIgnoreRequest(CookieValidateIdentityContext context)
{
string[] reservedPath =
{
"/__browserLink",
"/img",
"/fonts",
"/Scripts",
"/Content",
"/Uploads",
"/Images"
};
return reservedPath.Any(path => context.OwinContext.Request.Path.Value.StartsWith(path, StringComparison.OrdinalIgnoreCase)) ||
BundleTable.Bundles.Select(bundle => bundle.Path.TrimStart('~')).Any(bundlePath => context.OwinContext.Request.Path.Value.StartsWith(bundlePath,StringComparison.OrdinalIgnoreCase));
}