• 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&param2=value2", "param1")
    108                 .ShouldEqual("http://www.example.com/?param2=value2");
    109             //second param (&)
    110             _webHelper.RemoveQueryString("http://www.example.com/?param1=value1&param2=value2", "param2")
    111                 .ShouldEqual("http://www.example.com/?param1=value1");
    112             //non-existing param
    113             _webHelper.RemoveQueryString("http://www.example.com/?param1=value1&param2=value2", "param3")
    114                 .ShouldEqual("http://www.example.com/?param1=value1&param2=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&param2=value2", "param1=value3", null)
    142                 .ShouldEqual("http://www.example.com/?param1=value3&param2=value2");
    143             //second param (&)
    144             _webHelper.ModifyQueryString("http://www.example.com/?param1=value1&param2=value2", "param2=value3", null)
    145                 .ShouldEqual("http://www.example.com/?param1=value1&param2=value3");
    146             //non-existing param
    147             _webHelper.ModifyQueryString("http://www.example.com/?param1=value1&param2=value2", "param3=value3", null)
    148                 .ShouldEqual("http://www.example.com/?param1=value1&param2=value2&param3=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&param2=value2", "param1=value3", "Test")
    157                 .ShouldEqual("http://www.example.com/?param1=value3&param2=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&param2=value2#test1", "param1=value3", "Test2")
    166                 .ShouldEqual("http://www.example.com/?param1=value3&param2=value2#test2");
    167         }
    168     }
    169 }
    170 
    Nop.Core.Tests.WebHelperTests


    本文地址:http://www.cnblogs.com/yaoshangjin/p/nopCommerce39.html 

    本文为大波浪原创、转载请注明出处。

    如果您认为这篇文章还不错或者有所收获,可以点击下方的【关注】按钮,因为你的支持是我继续写作,分享的最大动力!
    作者:大波浪
    声明: 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果您发现博客中出现了错误,或者有更好的建议、想法,请及时与我联系!!如果想找我私下交流,可以私信或者加我QQ。
  • 相关阅读:
    如何更好地理解闭包
    抽象类和抽象方法以及和接口区别
    JavaScript中如何理解如何理解Array.apply(null, {length:5})
    Java线程中的同步
    Python前世今生以及种类、安装环境
    大数据中的用户画像
    Java web每天学之Servlet工作原理详情解析
    Go语言操作MySQL数据库
    老集群RAC双网卡绑定
    nmcli配置ipv6
  • 原文地址:https://www.cnblogs.com/yaoshangjin/p/nopCommerce39.html
Copyright © 2020-2023  润新知