nopCommerce 3.9 大波浪系列 之 IWebHelper
接口:Nop.Core.IWebHelper
实现:Nop.Core.WebHelper
测试:Nop.Core.Tests.WebHelperTests
简介:Web辅助类
功能:获取客户端IP地址、当前请求Url、服务器变量、主机地址、URL参数值
判断当前是否是安全连接、请求目标是否是静态资源、是否是重定向
修改/删除 URL参数值、重启应用程序
1 using System.Web; 2 3 namespace Nop.Core 4 { 5 /// <summary> 6 /// Represents a common helper 7 /// </summary> 8 public partial interface IWebHelper 9 { 10 /// <summary> 11 /// Get URL referrer 12 /// 获取客户端上次请求的url,默认实现:Request.UrlReferrer.PathAndQuery 13 /// </summary> 14 /// <returns>URL referrer</returns> 15 string GetUrlReferrer(); 16 17 /// <summary> 18 /// 获取客户端请求IP地址 19 /// </summary> 20 /// <returns>URL referrer</returns> 21 string GetCurrentIpAddress(); 22 23 /// <summary> 24 /// 获取当前页Url 25 /// </summary> 26 /// <param name="includeQueryString">False则不包含Url中的查询参数</param> 27 /// <returns>Page name</returns> 28 string GetThisPageUrl(bool includeQueryString); 29 30 /// <summary> 31 /// 获取当前页Url 32 /// </summary> 33 /// <param name="includeQueryString">False则不包含Url中的查询参数</param> 34 /// <param name="useSsl">True则获取SSL安全页面Https://xxx</param> 35 /// <returns>Page name</returns> 36 string GetThisPageUrl(bool includeQueryString, bool useSsl); 37 38 /// <summary> 39 /// 当前连接是否是安全的 40 /// </summary> 41 /// <returns>true - 安全, false - 不安全</returns> 42 bool IsCurrentConnectionSecured(); 43 44 /// <summary> 45 /// 根据服务器变量名称获取值 46 /// </summary> 47 /// <param name="name">服务器变量名称 例如:"HTTP_HOST"</param> 48 /// <returns>服务器变量值</returns> 49 string ServerVariables(string name); 50 51 /// <summary> 52 /// 获取主机地址 53 /// </summary> 54 /// <param name="useSsl">Use SSL</param> 55 /// <returns>主机地址</returns> 56 string GetStoreHost(bool useSsl); 57 58 /// <summary> 59 ///获取主机地址 默认调用 GetStoreHost(bool useSsl) 60 /// </summary> 61 /// <returns>Store location</returns> 62 string GetStoreLocation(); 63 64 /// <summary> 65 /// 获取主机地址 66 /// </summary> 67 /// <param name="useSsl">Use SSL</param> 68 /// <returns>Store location</returns> 69 string GetStoreLocation(bool useSsl); 70 71 /// <summary> 72 /// Returns true if the requested resource is one of the typical resources that needn't be processed by the cms engine. 73 /// 请求目标是静态资源文件 74 /// VirtualPathUtility.GetExtension 75 /// </summary> 76 /// <param name="request">HTTP Request</param> 77 /// <returns>True为请求目标是静态资源文件.</returns> 78 /// <remarks> 79 /// These are the file extensions considered to be static resources: 80 /// .css 81 /// .gif 82 /// .png 83 /// .jpg 84 /// .jpeg 85 /// .js 86 /// .axd 87 /// .ashx 88 /// </remarks> 89 bool IsStaticResource(HttpRequest request); 90 91 /// <summary> 92 /// Modifies query string 93 /// 修改查询字符串 94 /// </summary> 95 /// <param name="url">Url to modify</param> 96 /// <param name="queryStringModification">Query string modification</param> 97 /// <param name="anchor">Anchor</param> 98 /// <returns>New url</returns> 99 string ModifyQueryString(string url, string queryStringModification, string anchor); 100 101 /// <summary> 102 /// Url中移除指定的查询字符串 103 /// </summary> 104 /// <param name="url">Url to modify</param> 105 /// <param name="queryString">Query string to remove</param> 106 /// <returns>New url</returns> 107 string RemoveQueryString(string url, string queryString); 108 109 /// <summary> 110 /// Url获取参数名称对应的值 111 /// </summary> 112 /// <typeparam name="T"></typeparam> 113 /// <param name="name">Parameter name</param> 114 /// <returns>Query string value</returns> 115 T QueryString<T>(string name); 116 117 /// <summary> 118 /// 重启应用程序 119 /// 该方法在商城重启中会用到 120 /// </summary> 121 /// <param name="makeRedirect">A value indicating whether we should made redirection after restart</param> 122 /// <param name="redirectUrl">Redirect URL; empty string if you want to redirect to the current page URL</param> 123 void RestartAppDomain(bool makeRedirect = false, string redirectUrl = ""); 124 125 /// <summary> 126 /// Gets a value that indicates whether the client is being redirected to a new location 127 /// 获取指示客户端是否重定向到新位置的值。 128 /// 如果位置响应标头的值与当前位置不同,则为 true;否则为 false。 129 /// </summary> 130 bool IsRequestBeingRedirected { get; } 131 132 /// <summary> 133 /// Gets or sets a value that indicates whether the client is being redirected to a new location using POST 134 /// Post请求时获取指示客户端是否重定向到新位置的值。 135 /// </summary> 136 bool IsPostBeingDone { get; set; } 137 } 138 } 139
同学们可以在测试类“Nop.Core.Tests.WebHelperTests”进行测试进一步理解IWebHelper接口
1 using System.Collections.Specialized; 2 using System.Web; 3 using Nop.Core.Fakes; 4 using Nop.Tests; 5 using NUnit.Framework; 6 7 namespace Nop.Core.Tests 8 { 9 [TestFixture] 10 public class WebHelperTests 11 { 12 private HttpContextBase _httpContext; 13 private IWebHelper _webHelper; 14 15 [Test] 16 public void Can_get_serverVariables() 17 { 18 var serverVariables = new NameValueCollection(); 19 serverVariables.Add("Key1", "Value1"); 20 serverVariables.Add("Key2", "Value2"); 21 _httpContext = new FakeHttpContext("~/", "GET", null, null, null, null, null, serverVariables); 22 _webHelper = new WebHelper(_httpContext); 23 _webHelper.ServerVariables("Key1").ShouldEqual("Value1"); 24 _webHelper.ServerVariables("Key2").ShouldEqual("Value2"); 25 _webHelper.ServerVariables("Key3").ShouldEqual(""); 26 } 27 28 [Test] 29 public void Can_get_storeHost_without_ssl() 30 { 31 var serverVariables = new NameValueCollection(); 32 serverVariables.Add("HTTP_HOST", "www.example.com"); 33 _httpContext = new FakeHttpContext("~/", "GET", null, null, null, null, null, serverVariables); 34 _webHelper = new WebHelper(_httpContext); 35 _webHelper.GetStoreHost(false).ShouldEqual("http://www.example.com/"); 36 } 37 38 [Test] 39 public void Can_get_storeHost_with_ssl() 40 { 41 var serverVariables = new NameValueCollection(); 42 serverVariables.Add("HTTP_HOST", "www.example.com"); 43 _httpContext = new FakeHttpContext("~/", "GET", null, null, null, null, null, serverVariables); 44 _webHelper = new WebHelper(_httpContext); 45 _webHelper.GetStoreHost(true).ShouldEqual("https://www.example.com/"); 46 } 47 48 [Test] 49 public void Can_get_storeLocation_without_ssl() 50 { 51 var serverVariables = new NameValueCollection(); 52 serverVariables.Add("HTTP_HOST", "www.example.com"); 53 _httpContext = new FakeHttpContext("~/", "GET", null, null, null, null, null, serverVariables); 54 _webHelper = new WebHelper(_httpContext); 55 _webHelper.GetStoreLocation(false).ShouldEqual("http://www.example.com/"); 56 } 57 58 [Test] 59 public void Can_get_storeLocation_with_ssl() 60 { 61 var serverVariables = new NameValueCollection(); 62 serverVariables.Add("HTTP_HOST", "www.example.com"); 63 _httpContext = new FakeHttpContext("~/", "GET", null, null, null, null, null, serverVariables); 64 _webHelper = new WebHelper(_httpContext); 65 _webHelper.GetStoreLocation(true).ShouldEqual("https://www.example.com/"); 66 } 67 68 [Test] 69 public void Can_get_storeLocation_in_virtual_directory() 70 { 71 var serverVariables = new NameValueCollection(); 72 serverVariables.Add("HTTP_HOST", "www.example.com"); 73 _httpContext = new FakeHttpContext("~/nopCommercepath", "GET", null, null, null, null, null, serverVariables); 74 _webHelper = new WebHelper(_httpContext); 75 _webHelper.GetStoreLocation(false).ShouldEqual("http://www.example.com/nopcommercepath/"); 76 } 77 78 [Test] 79 public void Get_storeLocation_should_return_lowerCased_result() 80 { 81 var serverVariables = new NameValueCollection(); 82 serverVariables.Add("HTTP_HOST", "www.Example.com"); 83 _httpContext = new FakeHttpContext("~/", "GET", null, null, null, null, null, serverVariables); 84 _webHelper = new WebHelper(_httpContext); 85 _webHelper.GetStoreLocation(false).ShouldEqual("http://www.example.com/"); 86 } 87 88 [Test] 89 public void Can_get_queryString() 90 { 91 var queryStringParams = new NameValueCollection(); 92 queryStringParams.Add("Key1", "Value1"); 93 queryStringParams.Add("Key2", "Value2"); 94 _httpContext = new FakeHttpContext("~/", "GET", null, null, queryStringParams, null, null, null); 95 _webHelper = new WebHelper(_httpContext); 96 _webHelper.QueryString<string>("Key1").ShouldEqual("Value1"); 97 _webHelper.QueryString<string>("Key2").ShouldEqual("Value2"); 98 _webHelper.QueryString<string>("Key3").ShouldEqual(null); 99 } 100 101 [Test] 102 public void Can_remove_queryString() 103 { 104 _httpContext = new FakeHttpContext("~/", "GET", null, null, null, null, null, null); 105 _webHelper = new WebHelper(_httpContext); 106 //first param (?) 107 _webHelper.RemoveQueryString("http://www.example.com/?param1=value1¶m2=value2", "param1") 108 .ShouldEqual("http://www.example.com/?param2=value2"); 109 //second param (&) 110 _webHelper.RemoveQueryString("http://www.example.com/?param1=value1¶m2=value2", "param2") 111 .ShouldEqual("http://www.example.com/?param1=value1"); 112 //non-existing param 113 _webHelper.RemoveQueryString("http://www.example.com/?param1=value1¶m2=value2", "param3") 114 .ShouldEqual("http://www.example.com/?param1=value1¶m2=value2"); 115 } 116 117 [Test] 118 public void Can_remove_queryString_should_return_lowerCased_result() 119 { 120 _httpContext = new FakeHttpContext("~/", "GET", null, null, null, null, null, null); 121 _webHelper = new WebHelper(_httpContext); 122 _webHelper.RemoveQueryString("htTp://www.eXAmple.com/?param1=value1&parAm2=value2", "paRAm1") 123 .ShouldEqual("http://www.example.com/?param2=value2"); 124 } 125 126 [Test] 127 public void Can_remove_queryString_should_ignore_input_parameter_case() 128 { 129 _httpContext = new FakeHttpContext("~/", "GET", null, null, null, null, null, null); 130 _webHelper = new WebHelper(_httpContext); 131 _webHelper.RemoveQueryString("http://www.example.com/?param1=value1&parAm2=value2", "paRAm1") 132 .ShouldEqual("http://www.example.com/?param2=value2"); 133 } 134 135 [Test] 136 public void Can_modify_queryString() 137 { 138 _httpContext = new FakeHttpContext("~/", "GET", null, null, null, null, null, null); 139 _webHelper = new WebHelper(_httpContext); 140 //first param (?) 141 _webHelper.ModifyQueryString("http://www.example.com/?param1=value1¶m2=value2", "param1=value3", null) 142 .ShouldEqual("http://www.example.com/?param1=value3¶m2=value2"); 143 //second param (&) 144 _webHelper.ModifyQueryString("http://www.example.com/?param1=value1¶m2=value2", "param2=value3", null) 145 .ShouldEqual("http://www.example.com/?param1=value1¶m2=value3"); 146 //non-existing param 147 _webHelper.ModifyQueryString("http://www.example.com/?param1=value1¶m2=value2", "param3=value3", null) 148 .ShouldEqual("http://www.example.com/?param1=value1¶m2=value2¶m3=value3"); 149 } 150 151 [Test] 152 public void Can_modify_queryString_with_anchor() 153 { 154 _httpContext = new FakeHttpContext("~/", "GET", null, null, null, null, null, null); 155 _webHelper = new WebHelper(_httpContext); 156 _webHelper.ModifyQueryString("http://www.example.com/?param1=value1¶m2=value2", "param1=value3", "Test") 157 .ShouldEqual("http://www.example.com/?param1=value3¶m2=value2#test"); 158 } 159 160 [Test] 161 public void Can_modify_queryString_new_anchor_should_remove_previous_one() 162 { 163 _httpContext = new FakeHttpContext("~/", "GET", null, null, null, null, null, null); 164 _webHelper = new WebHelper(_httpContext); 165 _webHelper.ModifyQueryString("http://www.example.com/?param1=value1¶m2=value2#test1", "param1=value3", "Test2") 166 .ShouldEqual("http://www.example.com/?param1=value3¶m2=value2#test2"); 167 } 168 } 169 } 170
本文地址:http://www.cnblogs.com/yaoshangjin/p/nopCommerce39.html
本文为大波浪原创、转载请注明出处。
如果您认为这篇文章还不错或者有所收获,可以点击下方的【关注】按钮,因为你的支持是我继续写作,分享的最大动力!
作者:大波浪
声明:
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果您发现博客中出现了错误,或者有更好的建议、想法,请及时与我联系!!如果想找我私下交流,可以私信或者加我QQ。