рдЬрдм рдПрдХ рдмрдбрд╝реА, рдЕрддреНрдпрдзрд┐рдХ рднрд░реА рд╣реБрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрдХреНрд╕рд░ рдХрдИ рдкреГрд╖реНрдареЛрдВ рдХреЛ рдХреИрд╢ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдкреГрд╖реНрда рдкреБрдирдГ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдХреЗ рд▓реЛрдб рдХреЛ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдФрд░, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдбреЗрдЯрд╛ рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╢рд░реНрдд рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдпрд╛ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЗ рдЦрд┐рд▓рд╛рдл рдХреИрд╢ рдХреА рд╡реИрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХрд╛рд░реНрдп рдорд╛рдирдХ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдмрд╛рдж рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ, рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рддреБрдЪреНрдЫ рд╕реЗ рджреВрд░ рд╣реИред
рдХрдИ рдШрдВрдЯреЛрдВ рдХреЗ рд╢реЛрдз рдХреЗ рдмрд╛рдж, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЗ рдкрд╛рдП рдЧрдП:
1) рдХреИрд╢реНрдб рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда рдкрд░ "OutputCache" рдирд┐рд░реНрджреЗрд╢ рдХреА рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рдШреЛрд╖рдгрд╛ред
<%@ OutputCache Duration="600" VaryByParam="*" VaryByCustom="custom" %>
2) "CoudeBehind" рдкреЗрдЬ рдореЗрдВ Response.Cache рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХреИрд╢рд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рдирд╛:
HttpCachePolicy policy = Response.Cache; policy.SetCacheability(HttpCacheability.Server); policy.SetExpires(app.Context.Timestamp.AddSeconds((double)600)); policy.SetMaxAge(new TimeSpan(0, 0, 600)); policy.SetValidUntilExpires(true); policy.SetLastModified(app.Context.Timestamp); policy.VaryByParams.IgnoreParams = true;
рдЗрди рджреЛрдиреЛрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдиреБрдХрд╕рд╛рди рд╣реИрдВ, рдЬреИрд╕реЗ:
- рд▓рдЪреАрд▓реЗрдкрди рдХреА рдХрдореА
- рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдкрд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛
рдХрд╛рд░реНрдп рдХреЗ рдореЗрд░реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдЬреЛ рдкрд╣рд▓реА рдЗрдЪреНрдЫрд╛ рдкреИрджрд╛ рд╣реБрдИ, рд╡рд╣ рдереА рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдХреИрд╢рд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛, рдЬреЛ рдЕрдм рд╣рдо рдХрд░реЗрдВрдЧреЗред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЬреЛ рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджреЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдмрдирд╛ рджреЗрдЧрд╛ред
рдореЙрдбреНрдпреВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЖрдЗрдП рдПрдХ рд╡рд░реНрдЧ "OutputCacheModule" рдмрдирд╛рдПрдВ рдЬреЛ "IHttpModule" рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреЛ рд╡рд┐рдзрд┐рдпреЛрдВ "рдирд┐рдкрдЯрд╛рди" рдФрд░ "Init" рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, "рдбрд┐рд╕реНрдкреЛрдЬрд╝" рдкрджреНрдзрддрд┐ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд┐рдирд╛ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ "рдЗрдирд┐рдЯ" рд╡рд┐рдзрд┐ рдХреЛ рдХрд░реАрдм рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
"Init" рдкрджреНрдзрддрд┐ "HttpApplication" рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ, рдЗрд╕рд╕реЗ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╡реИрд╢реНрд╡рд┐рдХ рдШрдЯрдирд╛рдУрдВ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рд╣рд┐рдд рдХреА рдХрдИ рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╕рдордп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
public void Init(HttpApplication app) { app.PreRequestHandlerExecute += new EventHandler(OnApplicationPreRequestHandlerExecute); app.PostRequestHandlerExecute += new EventHandler(OnPostRequestHandlerExecute); }
"PostRequestHandlerExecute" рд╡рд┐рдзрд┐ рдХреЛ рддреБрд░рдВрдд рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдкреГрд╖реНрда рдпрд╛ рдЕрдиреНрдп рд╣реИрдВрдбрд▓рд░ рдЕрдиреБрд░реЛрдз рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдо рдХрдИ рд╢рд░реНрддреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреИрд╢рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХ "рд╣реЗрдбрд░" рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
public void OnPostRequestHandlerExecute(object sender, EventArgs e) { HttpApplication app = (HttpApplication)sender; Int32 duration = CacheHelper.GetCacheDuration(app.Context.Request); HttpCachePolicy policy = app.Response.Cache; if (!InverseContext.User.IsAuthenticated && duration > 0) { policy.SetCacheability(HttpCacheability.Server); policy.SetExpires(app.Context.Timestamp.AddSeconds(duration )); policy.SetMaxAge(new TimeSpan(0, 0, duration )); policy.SetValidUntilExpires(true); policy.SetLastModified(app.Context.Timestamp); policy.VaryByParams["*"] = true; } else { policy.SetCacheability(HttpCacheability.NoCache); policy.SetExpires(app.Context.Timestamp.AddSeconds(0)); } }
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рдХреИрдЪрд┐рдВрдЧ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд▓рдЪреАрд▓реЗ рдврдВрдЧ рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреЗрдЬ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЪреБрдирдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЕрдм, рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдкрд░ рд╡рд╛рдкрд╕, "PreRequestHandlerExecute," рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рддрд╛рдХрд┐ рдХрдерд╛ рдХреА рд░реИрдЦрд┐рдХрддрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рди рд╣реЛред "PreRequestHandlerExecute" рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдкреЗрдЬ рдпрд╛ рдЕрдиреНрдп рд╣реИрдВрдбрд▓рд░ рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред рдФрд░ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдХреИрд╢ рдореЗрдВ рдкреГрд╖реНрдареЛрдВ рдХреА рд╡реИрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ "рдХреЙрд▓рдмреИрдХ" рд╡рд┐рдзрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
public void OnApplicationPreRequestHandlerExecute(object sender, EventArgs e) { HttpApplication app = (HttpApplication) sender; if (!InverseContext.User.IsAuthenticated) { app.Context.Response.Cache.AddValidationCallback(new HttpCacheValidateHandler(Validate), app); } }
рдЗрд╕ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рд╢рд╛рдмреНрджрд┐рдХ рдЕрд░реНрде рд╣реИ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд - рд╣рд░ рдмрд╛рд░ рдХреИрд╢ рдореЗрдВ рдПрдХ рдкреЗрдЬ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдкрд░, "рдХреЙрд▓рдмреИрдХ" рд╡рд┐рдзрд┐ рдХреЛ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрддреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдФрд░ рдпрд╛ рддреЛ рдкреГрд╖реНрда рдХреЗ рдХреИрд╢реНрдб рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓реМрдЯрд╛рдПрдЧрд╛ рдпрд╛ рдПрдХ рдирдпрд╛ рдкреЗрдЬ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЪрдХреНрд░ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛ред рдЖрдЗрдП рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЛрдб рджреЗрдЦреЗрдВ:
public void Validate(HttpContext context, Object data, ref HttpValidationStatus status) { if (InverseContext.User.IsAuthenticated) { status = HttpValidationStatus.IgnoreThisRequest; context.Response.Cache.AddValidationCallback(new HttpCacheValidateHandler(Validate), "somecustomdata"); } else { status = HttpValidationStatus.Valid; } }
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╕реНрдерд┐рддрд┐ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рд╣реИ, рдЕрдЧрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧ рдЗрди рдирд╣реАрдВ рд╣реИ, рддреЛ рд╡рд╣ рдХреИрд╢ рд╕реЗ рдкреЗрдЬ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рднреА рдПрдХ рдкрд╣рд▓реВ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рддреН:
"HttpValidationStatus" - рдХреИрд╢реНрдб рдбреЗрдЯрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рддреАрди рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рди рд╣реИрдВ:
- IgnoreThisRequest - рдкреГрд╖реНрда рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдХреИрд╢ рдореЗрдВ рдкрдбрд╝рд╛ рд╕рдВрд╕реНрдХрд░рдг рдорд╛рдиреНрдп рд░рд╣реЗрдЧрд╛ред
- рдЕрдорд╛рдиреНрдп - рдкреГрд╖реНрда рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдХреИрд╢ рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдорд╛рдиреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдирдпрд╛ рд╕реНрдерд╛рди рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
- рдорд╛рдиреНрдп - рдХреИрд╢ рдорд╛рдиреНрдп рд╣реИ, рдЬрд╡рд╛рдм рдХреИрд╢ рд╕реЗ рдкреЗрдЬ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдЧрд╛ред
рдкрд░реАрдХреНрд╖рдг рдЕрд╡рдзрд┐ рдХреЗ рджреМрд░рд╛рди, рдЗрд╕ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдХреИрд╢рд┐рдВрдЧ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЗрд╡рд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, "Init" рд╡рд┐рдзрд┐ рдореЗрдВ, рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ "Application_EndRequest" рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕ рд╕рдордп рдХреЗ рдмрд╛рдж рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рднреА рдЪрд░рдг рдкрд╣рд▓реЗ рд╣реА рдкреВрд░реЗ рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВ, рдФрд░ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдХрд┐рд╕реА рдХреЛ рднреА "рд╣реЗрдбрд░" рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рд╕рдорд╛рди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
private void PrintServiceInformation(HttpApplication app) { app.Context.Response.Write("Rendered at " + DateTime.Now + "<br/>"); var cacheability = app.Context.Response.Cache.GetType().GetField("_cacheability", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(app.Context.Response.Cache); app.Context.Response.Write("HttpCacheability = " + cacheability); var expires = app.Context.Response.Cache.GetType().GetField("_utcExpires", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(app.Context.Response.Cache); app.Context.Response.Write("<br/> UtcExpires = " + expires); }
рдпрд╣рд╛рдВ рд░рд┐рдлреНрд▓реЗрдХреНрд╕рд┐рдпрди рдЬрд╛рджреВ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдкрд░реАрдХреНрд╖рдг рдЪрд░рдг рдХреЗ рд▓рд┐рдП рд╣реИред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдЖрдкрдХреЛ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдХрд╛ рдЖрдЦрд┐рд░реА рд╕рд╛ рдЬрд╛рджреВ рдЯреЛрдирд╛
1) "Responce.Flush ()" рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рди рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдХреИрд╢рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ "HttpCacheability.Pirt" рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде "HttpCacheability.Pirt" рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИ рдЬрдм рд╕рд╛рдЗрдЯ IIS рд╕рд░реНрд╡рд░ рдЪрд▓рд╛ рд░рд╣реА рд╣реИ, рдФрд░ рдЗрд╕реЗ рдкреАрд╕ рд▓реЗрдВред рдЕрд╕рдВрднрд╡ (рдкреИрд░рд╛ 2 рджреЗрдЦреЗрдВ)ред
2) ASP.Net рдореЗрдВ рдХреИрд╢рд┐рдВрдЧ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм "HttpCacheability" рд╡рд┐рдзрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ
if (s_cacheabilityValues[(int)cacheability] < s_cacheabilityValues[(int)_cacheability])
рдФрд░ "рдПрдирдо" рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
public enum HttpCacheability { NoCache = 1, Private = 2, Server = 3, ServerAndNoCache = 3, Public = 4, ServerAndPrivate = 5, }
рдЗрд╕рд▓рд┐рдП рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЦрдбрд╝рд╛ рд╣реИ, рдЙрд╕рд╕реЗ "рдЗрдВрдЯ" рдореВрд▓реНрдп рдкрд░ рдЕрдзрд┐рдХ рдореВрд▓реНрдп рд▓рдЧрд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред "SetExpires" рд╡рд┐рдзрд┐ рдЗрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреА рд╣реИред