ASP.NET MVC рдореЗрдВ рдХреИрд╢рд┐рдВрдЧ

рдкрд┐рдЫрд▓реА рдкреЛрд╕реНрдЯ рдореЗрдВ, рдореИрдВрдиреЗ рд╡рд┐рднрд┐рдиреНрди рдХреИрд╢рд┐рдВрдЧ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереАред рдПрдХ рдирдЧреНрди рд╕рд┐рджреНрдзрд╛рдВрдд рдерд╛, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдЕрдЬреНрдЮрд╛рдд рд╣реИ, рдЗрд╕рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд┐рдирд╛ рдХреБрдЫ рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рдПрдХ ASP.NET MVC рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХреИрд╢рд┐рдВрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдХреЛрдЪрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╡рд╛рд╕реНрддреБ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред



рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди MVC рдореНрдпреВрдЬрд╝рд┐рдХ рд╕реНрдЯреЛрд░ рд▓рд┐рдпрд╛ , рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ asp.net рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдЖрд╡реЗрджрди рдПрдХ рдСрдирд▓рд╛рдЗрди рд╕реНрдЯреЛрд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЯреЛрдХрд░реА, рд╕рд╛рдорд╛рдиреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдФрд░ рдПрдХ рдЫреЛрдЯрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдХреА рдЦреЛрдЬ


рддреБрд░рдВрдд рдПрдХ рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рд▓реЛрдб рдкрд░реАрдХреНрд╖рдг рдмрдирд╛рдпрд╛, рдЬреЛ рдореБрдЦреНрдп рдкреГрд╖реНрда рдЦреЛрд▓рддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 60 рдкреГрд╖реНрда рдирд┐рдХрд▓рд╛ (рдореИрдВрдиреЗ рдбрд┐рдмрдЧ рдореЗрдВ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдП)ред рдпрд╣ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ, рдпрд╣ рд╕рдордЭрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИред

рдореБрдЦрдкреГрд╖реНрда рдирд┐рдпрдВрддреНрд░рдХ рдХреЛрдб:
public ActionResult Index() { // Get most popular albums var albums = GetTopSellingAlbums(5); return View(albums); } private List<Album> GetTopSellingAlbums(int count) { // Group the order details by album and return // the albums with the highest count return storeDB.Albums .OrderByDescending(a => a.OrderDetails.Count()) .Take(count) .ToList(); } 


рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░ рдПрдЧреНрд░реАрдЧреЗрдЯ рдХреНрд╡реЗрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛, рдЬрдмрдХрд┐ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдЖрдорддреМрд░ рдкрд░ рд╣реЛрддреЗ рд╣реИрдВред

рдЙрд╕реА рд╕рдордп, рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдкрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ - рдЯреЛрдХрд░реА рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред
рдХреЛрдб _layout.cshtml (рд░реЗрдЬрд░):
 <div id="header"> <h1><a href="/">ASP.NET MVC MUSIC STORE</a></h1> <ul id="navlist"> <li class="first"><a href="@Url.Content("~")" id="current">Home</a></li> <li><a href="@Url.Content("~/Store/")">Store</a></li> <li>@{Html.RenderAction("CartSummary", "ShoppingCart");}</li> <li><a href="@Url.Content("~/StoreManager/")">Admin</a></li> </ul> </div> 


рдпрд╣ "рдкреИрдЯрд░реНрди" рдЕрдХреНрд╕рд░ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░, рдЬреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЦреБрд▓рддрд╛ рд╣реИ, рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд▓рд╛рдЧрддреЛрдВ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдЬрдЧрд╣ - рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЬрд╛рдирдХрд╛рд░реА рдЬреЛ рдЕрдХреНрд╕рд░ рдмрджрд▓рддреА рд░рд╣рддреА рд╣реИред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдореБрдЦреНрдп рдкреГрд╖реНрда рдзреАрдорд╛ рд╣реИ рдФрд░ HTTP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдмрдирд╛рдирд╛


рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдкреЗрдЬ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдФрд░ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред ASP.NET MVC рдореЗрдВ, рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред
рдХреЛрдб _layout.cshtml (рд░реЗрдЬрд░):
 <div id="header"> <h1><a href="/">ASP.NET MVC MUSIC STORE</a></h1> <ul id="navlist"> <li class="first"><a href="@Url.Content("~")" id="current">Home</a></li> <li><a href="@Url.Content("~/Store/")">Store</a></li> <li><span id="shopping-cart"></span></li> <li><a href="@Url.Content("~/StoreManager/")">Admin</a></li> </ul> </div> <!-- skipped --> <script> $('#shopping-cart').load('@Url.Action("CartSummary", "ShoppingCart")'); </script> 


рдирд┐рдпрдВрддреНрд░рдХ рдХреЛрдб рдореЗрдВ:
 //[ChildActionOnly] // [HttpGet] // public ActionResult CartSummary() { var cart = ShoppingCart.GetCart(this.HttpContext); ViewData["CartCount"] = cart.GetCount(); this.Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache); //  return PartialView("CartSummary"); } 


NoCache рдХреИрд╢рд┐рдВрдЧ рдореЛрдб рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ Ajax рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдХреИрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдкрдиреЗ рдЖрдк рд╕реЗ, рдЗрд╕ рддрд░рд╣ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рд╕реЗ рдЖрд╡реЗрджрди рдХреЗрд╡рд▓ рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ - рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 52 рдкреГрд╖реНрдареЛрдВ, рдЯреЛрдХрд░реА рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ajax рдЕрдиреБрд░реЛрдз рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдПред

рд╣рдордиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдУрд╡рд░рдХреНрд▓реЙрдХ рдХрд┐рдпрд╛


рдЕрдм рдЖрдк рдЖрд▓рд╕реА рдХреИрд╢рд┐рдВрдЧ рдкреЗрдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЦреНрдп рдкреГрд╖реНрда рд╣реА рд╣рд░ рдЬрдЧрд╣ рдФрд░ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЖрдБрдХрдбрд╝реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдЧреНрд░рд╕реНрдд рд╣реИрдВ)ред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдмрд╕ рдирд┐рдпрдВрддреНрд░рдХ рд╡рд┐рдзрд┐ рд╕реЗ OutputCache рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 [OutputCache(Location=System.Web.UI.OutputCacheLocation.Any, Duration=60)] public ActionResult Index() { // skipped } 


рдЧрддрд┐рд╢реАрд▓ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рддреЗ рд╕рдордп рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ web.config рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
 <system.webServer> <urlCompression dynamicCompressionBeforeCache="false"/> </system.webServer> 

рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рд╕рд░реНрд╡рд░ рд╡реИрд░реА: * рд╣реЗрдбрд░ рдХреЛ рди рджреЗ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╢рд┐рдВрдЧ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред

рд▓реЛрдб рдкрд░реАрдХреНрд╖рдг рдиреЗ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 197 рдкреГрд╖реНрдареЛрдВ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдпрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣реЛрдо \ рдЗрдВрдбреЗрдХреНрд╕ рдкреЗрдЬ рдХреЛ рд╣рдореЗрд╢рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛ рд╕рд░реНрд╡рд░ рдХреИрд╢ рд╕реЗ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рдерд╛, рдпрд╛рдиреА рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдиреЗ рдЯреЛрдХрд░реА рдореЗрдВ рдЖрдЗрдЯрдореЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдз рдХреА рдЧрддрд┐ рдХреЛ рдорд╛рдкрд╛ред

рдЯреЛрдХрд░реА рдХреЗ рдХрд╛рдо рдХреЛ рддреЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯреЛрдХрд░реА рдореЗрдВ рдЖрдЗрдЯрдо рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдкрд░ рдХрд╛рд░реНрдЯ.рдЧреЗрдЯрдХрд╛рдЙрдВрдЯ () рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ asp.net рдХреИрд╢ рдореЗрдВ рдмрдЪрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХреИрд╢ рдХреЛ рдлреНрд▓рд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рд░рд╛рдЗрдЯ-рдереНрд░реВ рдХреИрд╢ рд╣реЛрдЧрд╛ред

рдПрдорд╡реАрд╕реА рдореНрдпреВрдЬрд┐рдХ рд╕реНрдЯреЛрд░ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рдХреИрд╢рд┐рдВрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ 3 рдХреНрд░рд┐рдпрд╛рдУрдВ рд╕реЗ рдЯреЛрдХрд░реА рдХреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рдореБрд╢реНрдХрд┐рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЖрдкрдХреЛ рдХреИрд╢ рдмреБрд╢ рдХреЛ рдХреЗрдВрджреНрд░реАрдп рд░реВрдк рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд \ рд╕рджрд╕реНрдпрддрд╛ рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐:
 [HttpGet] public ActionResult CartSummary() { var cart = ShoppingCart.GetCart(this.HttpContext); var cacheKey = "shooting-cart-" + cart.ShoppingCartId; this.HttpContext.Cache[cacheKey] = this.HttpContext.Cache[cacheKey] ?? cart.GetCount(); ViewData["CartCount"] = this.HttpContext.Cache[cacheKey]; return PartialView("CartSummary"); } 


рдЯреЛрдХрд░реА рдХреЛ рдмрджрд▓рдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рджреЛ рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 var cacheKey = "shooting-cart-" + cart.ShoppingCartId; this.HttpContext.Cache.Remove(cacheKey); 


рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд▓реЛрдб рдкрд░реАрдХреНрд╖рдг рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 263 рдЕрдиреБрд░реЛрдз рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ 4 рдЧреБрдирд╛ рдЕрдзрд┐рдХред

HTTP рдХреИрд╢рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдЕрдВрддрд┐рдо рддрд╛рд░ рдЯреЛрдХрд░реА рдореЗрдВ рдорджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП HTTP рдХреИрд╢рд┐рдВрдЧ рдХреЛ рдЦрд░рд╛рдм рдХрд░ рд░рд╣рд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП:
  1. рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╢реАрд░реНрд╖рдХреЛрдВ рдореЗрдВ рдЕрдВрддрд┐рдо-рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ
  2. рдЗрдлрд╝-рдореЙрдбрд┐рдлрд╝рд╛рдЗрдб-рдЪреВрдВрдХрд┐-рдирд┐рд╡реЗрджрди рд╣реЗрдбрд░ (рд╕рд╢рд░реНрдд GET)
  3. рдпрджрд┐ рдореВрд▓реНрдп рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ рддреЛ рдХреЛрдб 304 рджреЗрдВ


рдЪрд▓рд┐рдП рдЕрдВрдд рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рд╕рдВрд╢реЛрдзрд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП ActionResult рдХреЛрдб:
 public class NotModifiedResult: ActionResult { public override void ExecuteResult(ControllerContext context) { var response = context.HttpContext.Response; response.StatusCode = 304; response.StatusDescription = "Not Modified"; response.SuppressContent = true; } } 


рд╕рд╢рд░реНрдд GET рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдЕрдВрддрд┐рдо-рд╕рдВрд╢реЛрдзрд┐рдд рд╕реНрдерд╛рдкрдирд╛ рдЬреЛрдбрд╝реЗрдВ:
 [HttpGet] public ActionResult CartSummary() { //   ,     this.Response.Cache.SetCacheability(System.Web.HttpCacheability.Private); this.Response.Cache.SetMaxAge(TimeSpan.Zero); var cart = ShoppingCart.GetCart(this.HttpContext); var cacheKey = "shooting-cart-" + cart.ShoppingCartId; var cachedPair = (Tuple<DateTime, int>)this.HttpContext.Cache[cacheKey]; if (cachedPair != null) //       { // Last-Modified this.Response.Cache.SetLastModified(cachedPair.Item1); var lastModified = DateTime.MinValue; // Conditional Get if (DateTime.TryParse(this.Request.Headers["If-Modified-Since"], out lastModified) && lastModified >= cachedPair.Item1) { return new NotModifiedResult(); } ViewData["CartCount"] = cachedPair.Item2; } else //       { // ,    var now = DateTime.Now; now = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second); // Last-Modified this.Response.Cache.SetLastModified(now); var count = cart.GetCount(); this.HttpContext.Cache[cacheKey] = Tuple.Create(now, count); ViewData["CartCount"] = count; } return PartialView("CartSummary"); } 


рдмреЗрд╢рдХ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд░рдЦрд░рдЦрд╛рд╡ рдФрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рддреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдорд┐рдирдЯ рд░рди рдореЗрдВ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 321 рдкреГрд╖реНрдареЛрдВ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб, 5.3 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рд╣реИред

Zalkyuchenie


рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдЖрдкрдХреЛ рдХреИрд╢рд┐рдВрдЧ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ HTTP рдХреИрд╢рд┐рдВрдЧ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рд╢реБрд░реБрдЖрдд рд╕реЗ рд╣реА рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдлрд┐рд░ рдПрдХ рдорд╛рдореВрд▓реА рд▓реЛрд╣реЗ рдкрд░ рднрд╛рд░реА рднрд╛рд░ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред

Source: https://habr.com/ru/post/In168869/


All Articles