首页新闻找找看学习计划

.NET Core中WebUtility与HttpUtility有什么区别?

0
悬赏园豆:50 [待解决问题]

WebUtility 的命名空间是 System.Net , HttpUtility 的命名空间是 System.Web ,它们都有 HtmlEncode/HtmlDecode 与 UrlEncode 与 UrlDecode 方法

dudu的主页 dudu | 高人七级 | 园豆:41262
提问于:2018-01-13 08:40
< >
分享
所有回答(5)
0

我猜:System.Web的一般是服务端用,System.Net的一般是客户端用,是fcl中两个较大的范畴划分,不适宜并到一个程序集里。对于一些两端都可能用到的东西,一种办法是单独写到一个程序集里,比如叫System.Net.Common.dll之类,然后web和net共同引用它;另一种就是各自放一份,显然MS选择的是这种,也许是共用部分量不大,不值得单独弄个dll。

ahdung | 园豆:206 (菜鸟二级) | 2018-01-13 09:31
0

HttpUtility 里边的 HtmlEncode/HtmlDecode调用的也是System.Net 的WebUtility.HtmlEncode/HtmlDecode
源码:
HttpUtility
public static string HtmlDecode(string s) => HttpEncoder.HtmlDecode(s);
internal static string HtmlEncode(string value) => string.IsNullOrEmpty(value) ? value : WebUtility.HtmlEncode(value);
HtmlEncode也是一样的。
关于UrlEncodeUrlDecode感觉是两个人写了两份。原因目前也没找到为什么这么写。
HttpUtilityUrlEncode

                       if (ch <= '<')
                        {
                            switch (ch)
                            {
                                case '<':
                                    output.Write("&lt;");
                                    break;
                                case '"':
                                    output.Write("&quot;");
                                    break;
                                case '\'':
                                    output.Write("&#39;");
                                    break;
                                case '&':
                                    output.Write("&amp;");
                                    break;
                                default:
                                    output.Write(ch);
                                    break;
                            }
                        }
                        else
                        {
                            output.Write(ch);
                        }

WebUtilityUrlEncode

                   if (ch <= '>')
                    {
                        switch (ch)
                        {
                            case '<':
                                output.Append("&lt;");
                                break;
                            case '>':
                                output.Append("&gt;");
                                break;
                            case '"':
                                output.Append("&quot;");
                                break;
                            case '\'':
                                output.Append("&#39;");
                                break;
                            case '&':
                                output.Append("&amp;");
                                break;
                            default:
                                output.Append(ch);
                                break;
                        }

感觉还是WebUtility处理的方式好一点

Bluto | 园豆:317 (菜鸟二级) | 2018-01-13 10:09
0

我猜一楼说得对

数据酷软件 | 园豆:371 (菜鸟二级) | 2018-01-13 18:56
0

https://msdn.microsoft.com/en-us/library/ee388354(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/system.web.httputility(v=vs.110).aspx

(1) System.Web.HttpUtility 当进行Web请求时提供URL编码解码的方法,不能被继承
备注:此类被HttpServerUtility内置。但是HttpUtility类包含encoding和decoding方法,Server Object无法使用。
Web应用程序之外的编解码,使用WebUtility类。

(2) System.Net.WebUtility 当进行Web请求时提供URLs编码和解码的方法
备注:HttpUtility包含为HTML编码的字串编码解码的方法,System.Uri类也包含为同样目的的方法和属性
System.Net.WebUtility.HtmlDecode 解码因HTTP传输而HTML编码的字串 注意:如果字符如空格和标点在Http流中传递过来,他们有可能在接收的末尾被错误解码。HTML编码转换那些HTML中不允许的字符成等价的字符实体;HTML解码与编码反向。例如,当内置一个文字块,字符<和>被编码成&lt;和&gt;来进行HTTP传输。若参数值null,解码返回null,若值空,解码也为空。
System.Net.WebUtility.UrlDecode 把在URL里因传输而编码的字串解码 注意:如果字符如空格和标点在Http流中传递过来,他们有可能在接收的末尾被错误解码。URL编码转换那些URL中不允许的字符成等价的16进制转义序列;UrlEncode生成一个URL编码串。URL解码用相应的ASCII字符替换十六进制转义序列,例如,URL编码块,转义序列%3c和%3e被解码成<和>。

炎炎夏日凉凉 | 园豆:345 (菜鸟二级) | 2018-01-15 17:11
0
RichardSun | 园豆:186 (初学一级) | 2019-11-15 15:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册