src/DotNetCommon.Core/Extensions/UriExtensions.cs

(开头部分) 3KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

namespace DotNetCommon.Extensions
{
    using DotNetCommon;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Text.RegularExpressions;

    /// <summary>
    /// 提供一组使用<see cref="Uri"/>的辅助方法。
    /// </summary>
    public static class UriExtensions
    {
        private static readonly Regex QueryStringRegex = new Regex(@"[?|&]([%23\w\.-]+)=([^?|^&]+)", RegexOptions.Compiled);

        /// <summary>
        /// 从查询字符串中提取参数和值。
        /// </summary>
        /// <remarks>
        /// 此方法还可以正确<c>URL解码</c>解析的键和值。
        /// </remarks>
        public static IEnumerable<KeyValuePair<string, string>> ParseQueryString(this Uri uri)
        {
            Ensure.NotNull(uri, nameof(uri));

            var match = QueryStringRegex.Match(uri.OriginalString);
            while (match.Success)
            {
                yield return new KeyValuePair<string, string>(
                    WebUtility.UrlDecode(match.Groups[1].Value),
                    WebUtility.UrlDecode(match.Groups[2].Value));
                match = match.NextMatch();
            }
        }

        /// <summary>
        /// 添加或附加给定的<paramref name="parameter"/>和<paramref name="value"/>
        /// 到<paramref name="uri"/>的查询字符串。
        /// </summary>
        /// <remarks>
        /// 此方法可以正确地<c>URL-encode</c>为给定的<paramref name="parameter"/>和<paramref name="value"/>。
        /// </remarks>
        public static Uri AddParametersToQueryString(this Uri uri, string parameter, string value)
        {
            Ensure.NotNull(uri, nameof(uri));
            Ensure.NotNullOrEmptyOrWhiteSpace(parameter);
            Ensure.NotNullOrEmptyOrWhiteSpace(value);

            var queryToAppend = string.Concat(WebUtility.UrlEncode(parameter), "=", WebUtility.UrlEncode(value));
            return AddOrAppendToQueryString(uri, queryToAppend);
        }

        /// <summary>
        /// 将键和值的给定<paramref name="pairs"/>添加或附加到<paramref name="uri"/>的查询字符串中。
        /// </summary>
        /// <remarks>
        /// 该方法也正确地<c>URL-encode</c>的键和值。
        /// </remarks>
        public static Uri AddParametersToQueryString(this Uri uri, IDictionary<string, string> pairs)
后面还有 28 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。