Code 1using System; 2using System.Text.RegularExpressions; 3using System.Web; 4using PetShop.BLL; 5using System.Web.Caching; 6using PetShop.CacheDependencyFactory; 7using System.Configuration; 8 9namespace PetShop.Web { 10/**////<summary> 11/// Collection of utility methods for web tier 12///</summary> 13publicstaticclass WebUtility { 14 15privateconststring REDIRECT_URL ="~/Search.aspx?keywords={0}"; 16privateconststring CATEGORY_NAME_KEY ="category_name_{0}"; 17privateconststring PRODUCT_NAME_KEY ="product_name_{0}"; 18privatestaticreadonlybool enableCaching =bool.Parse(ConfigurationManager.AppSettings["EnableCaching"]); 19 20 21/**////<summary> 22/// Method to make sure that user's inputs are not malicious 23///</summary> 24///<param name="text">User's Input</param> 25///<param name="maxLength">Maximum length of input</param> 26///<returns>The cleaned up version of the input</returns> 27publicstaticstring InputText(string text, int maxLength) { 28 text = text.Trim(); 29if (string.IsNullOrEmpty(text)) 30returnstring.Empty; 31if (text.Length > maxLength) 32 text = text.Substring(0, maxLength); 33 text = Regex.Replace(text, "[\\s]{2,}", ""); //two or more spaces 34 text = Regex.Replace(text, "(<[b|B][r|R]/*>)+|(<[p|P](.|\\n)*?>)", "\n"); //<br> 35 text = Regex.Replace(text, "(\\s*&[n|N][b|B][s|S][p|P];\\s*)+", ""); // 36 text = Regex.Replace(text, "<(.|\\n)*?>", string.Empty); //any other tags 37 text = text.Replace("'", "''"); 38return text; 39 } 40 41/**////<summary> 42/// Method to check whether input has other characters than numbers 43///</summary> 44publicstaticstring CleanNonWord(string text) { 45return Regex.Replace(text, "\\W", ""); 46 } 47 48/**////<summary> 49/// Method to redirect user to search page 50///</summary> 51///<param name="key">Search keyword</param> 52publicstaticvoid SearchRedirect(string key) { 53 HttpContext.Current.Response.Redirect(string.Format(REDIRECT_URL, InputText(key, 255))); 54 } 55 56/**////<summary> 57/// Method to retrieve and cache category name by its ID 58///</summary> 59///<param name="categoryId">Category id</param> 60///<returns>Category name</returns> 61publicstaticstring GetCategoryName(string categoryId) { 62 63 Category category =new Category(); 64if (!enableCaching) 65return category.GetCategory(categoryId).Name; 66 67string cacheKey =string.Format(CATEGORY_NAME_KEY, categoryId); 68 69// Check if the data exists in the data cache 70string data = (string)HttpRuntime.Cache[cacheKey]; 71if (data ==null) { 72// Caching duration from Web.config 73int cacheDuration =int.Parse(ConfigurationManager.AppSettings["CategoryCacheDuration"]); 74 75// If the data is not in the cache then fetch the data from the business logic tier 76 data = category.GetCategory(categoryId).Name; 77 78// Create a AggregateCacheDependency object from the factory 79 AggregateCacheDependency cd = DependencyFacade.GetCategoryDependency(); 80 81// Store the output in the data cache, and Add the necessary AggregateCacheDependency object 82 HttpRuntime.Cache.Add(cacheKey, data, cd, DateTime.Now.AddHours(cacheDuration), Cache.NoSlidingExpiration, CacheItemPriority.High, null); 83 } 84 85return data; 86 } 87 88/**////<summary> 89/// Method to retrieve and cache product name by its ID 90///</summary> 91///<param name="productId">Product id</param> 92///<returns>Product name</returns> 93publicstaticstring GetProductName(string productId) { 94 95 Product product =new Product(); 96if (!enableCaching) 97return product.GetProduct(productId).Name; 98 99string cacheKey =string.Format(PRODUCT_NAME_KEY, productId); 100 101// Check if the data exists in the data cache 102string data = (string)HttpRuntime.Cache[cacheKey]; 103 104if (data ==null) { 105// Caching duration from Web.config 106int cacheDuration =int.Parse(ConfigurationManager.AppSettings["ProductCacheDuration"]); 107 108// If the data is not in the cache then fetch the data from the business logic tier 109 data = product.GetProduct(productId).Name; 110 111// Create a AggregateCacheDependency object from the factory 112 AggregateCacheDependency cd = DependencyFacade.GetProductDependency(); 113 114// Store the output in the data cache, and Add the necessary AggregateCacheDependency object 115 HttpRuntime.Cache.Add(cacheKey, data, cd, DateTime.Now.AddHours(cacheDuration), Cache.NoSlidingExpiration, CacheItemPriority.High, null); 116 117 } 118 119return data; 120 } 121 } 122}