91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

WebAPi添加常用擴展方法及思維發散

發布時間:2020-08-06 04:37:06 來源:網絡 閱讀:327 作者:xsster 欄目:網絡安全

WebAPi常用擴展方法

(1)獲取所有鍵值對

WebAPi添加常用擴展方法及思維發散

        /// <summary>
        /// 獲取所有鍵值        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public static Dictionary<string, string> GetQueryStrings(this HttpRequestMessage request)
        {            return request.GetQueryNameValuePairs().ToDictionary(k => k.Key, v => v.Value, StringComparer.OrdinalIgnoreCase);
        }

WebAPi添加常用擴展方法及思維發散

 (2)獲取單個key對應value

WebAPi添加常用擴展方法及思維發散

         /// <summary>
        /// 獲取單個鍵值        /// </summary>
        /// <param name="request"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public static string GetQueryString(this HttpRequestMessage request, string key)
        {            var queryStrings = request.GetQueryNameValuePairs();            if (queryStrings == null)                return null;            var match = queryStrings.FirstOrDefault(kv => string.Compare(kv.Key, key, true) == 0);            if (string.IsNullOrEmpty(match.Value))                return null;            return match.Value;
        }

WebAPi添加常用擴展方法及思維發散

注意:請不要告訴我用HttpContext.Current.Request.QueryString["key"]去獲取鍵值,在WebHost模式下是可以的,但是在SelfHost模式下該對象是為空的。

(3)獲取請求頭中對應鍵值

WebAPi添加常用擴展方法及思維發散

        /// <summary>
        /// 依據鍵獲取請求頭中值數據        /// </summary>
        /// <param name="request"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public static string GetHeader(this HttpRequestMessage request, string key)
        {
            IEnumerable<string> keys = null;            if (!request.Headers.TryGetValues(key, out keys))                return null;            return keys.First();
        }

WebAPi添加常用擴展方法及思維發散

(4)獲取Cookie中鍵值

WebAPi添加常用擴展方法及思維發散

         /// <summary>
        /// 獲取Cookie        /// </summary>
        /// <param name="request"></param>
        /// <param name="cookieName"></param>
        /// <returns></returns>
        public static string GetCookie(this HttpRequestMessage request, string cookieName)
        {
            CookieHeaderValue cookie = request.Headers.GetCookies(cookieName).FirstOrDefault();            if (cookie != null)                return cookie[cookieName].Value;            return null;
        }

WebAPi添加常用擴展方法及思維發散

思維發散 

我們知道在ASP.NET中獲取請求參數值時用QueryString、在獲取獲取Web.config配置中值時、以及請求頭中有時候會用到NameValueCollection,在上述中我們返回的是Dictionary<string,string>,那Dictionary和NameValueCollection在獲取參數時有什么區別呢?

NameValueCollection 

我們來看看其具體用法,在此類中添加對應數據并獲取:

WebAPi添加常用擴展方法及思維發散

        static NameValueCollection GetCollection()
        {            var collection = new NameValueCollection();
            collection.Add("張三", "博客園");
            collection.Add("李四", "csdn");
            collection.Add("李四", "51cto");
            collection.Add("張三", "IBM");            return collection;
        }

WebAPi添加常用擴展方法及思維發散

進行打印:

WebAPi添加常用擴展方法及思維發散

            var collection = GetCollection();            foreach (string key in collection.AllKeys)
            {
                Console.WriteLine(key);
                Console.WriteLine(collection[key]);
            }

WebAPi添加常用擴展方法及思維發散

WebAPi添加常用擴展方法及思維發散

從上可以看出,此時的鍵沒有重復返回,但是此時每一個鍵會映射到一個字符串數組即里面存的是相同的鍵所對應的值。所以我們可以得出結論通過AllKeys屬性來進行遍歷NameValueCollection集合時此時返回的鍵是所有未重復的鍵。

此時我們若取某個不存在的鍵結果會是怎樣呢?

 Console.WriteLine(collection["xpy0928"] == null);

此時會打印出True。

基于此我們可以得出結論:

當在NameValueCollection集合中依據鍵去取值時,若有多個值被找到,此時則會返回以逗號隔開的字符串數組,若未找到則返回空。

接下來我們看看該集合的其他方法:

WebAPi添加常用擴展方法及思維發散

            Console.WriteLine(collection.HasKeys());

            Console.WriteLine(collection.GetKey(0));            string value = collection.Get(0);

            Console.WriteLine(value);

WebAPi添加常用擴展方法及思維發散

(1)第一個顯示該集合中是否存在鍵值(返回True)。

(2)獲取該集合的第一個鍵(返回張三)。

(3)獲取第一鍵對應的值(返回博客園,IBM)。

上述都是關于判斷鍵以及取鍵值的情況,當然里面還有添加和移除的方法,添加我們不必多說,我們來看看移除的方法。

WebAPi添加常用擴展方法及思維發散

            collection.Remove("張三");

            collection.Remove("xpy0928");            foreach (var key in collection.AllKeys)
            {
                Console.WriteLine(key);
                Console.WriteLine(collection[key]);
            }

WebAPi添加常用擴展方法及思維發散

WebAPi添加常用擴展方法及思維發散

當移除已存在的鍵時,此時則會刪除該鍵對應的所有值,但是很有意思的是移除一個不存在的鍵時根本不會拋出異常。

Dictionary

接下來我們看看Dictionary。

WebAPi添加常用擴展方法及思維發散

        static Dictionary<string, string> GetDict()
        {            var dictionary = new Dictionary<string, string>();
            dictionary.Add("張三", "博客園");
            dictionary.Add("李四", "csdn");
            dictionary.Add("王五", "51cto");
            dictionary.Add("趙六", "IBM");            return dictionary;
        }

WebAPi添加常用擴展方法及思維發散

我們添加一項看看

            var dict = GetDict();
            dict.Add("張三", "博客園");

WebAPi添加常用擴展方法及思維發散

在字典中不能添加重復項。

至此,我們可以得出結論:在NameValueCollection與Dictionary上最主要的區別在于NameValueCollection可以添加重復項,而Dictionary不行。

當然在字典中去移除不存在的鍵也不會拋出異常,如下:

  dict.Remove("xpy928");

接下來我們來看看二者在查找數據時是否有性能上的差異,我們在Release模式來進行操作。

WebAPi添加常用擴展方法及思維發散

            var collection = GetCollection();            var dict = GetDict();            var stopWatch = new Stopwatch();
            stopWatch.Start();            for (int i = 0; i < 100000000; i++)
            {                string value = collection["張三"];
            }            var time = stopWatch.ElapsedMilliseconds;
            Console.WriteLine(time);
            stopWatch.Stop();            var stopWatchDict = new Stopwatch();
            stopWatchDict.Start();            for (int i = 0; i < 100000000; i++)
            {                string value = dict["張三"];
            }            var time1 = stopWatchDict.ElapsedMilliseconds;
            Console.WriteLine(time1);
            stopWatchDict.Stop();

WebAPi添加常用擴展方法及思維發散

如上我們迭代10億次來看看二者在查找數據上有沒有性能差異:

 WebAPi添加常用擴展方法及思維發散

這里我們可以看到用NameValueCollection去獲取數據時耗時48秒,而用Dictionary則耗時4秒,從此可以看出二者除了在添加數據上的差異還有在迭代查詢數據時也有很大的性能差異。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

于都县| 长丰县| 迁安市| 灯塔市| 钦州市| 泗水县| 丹东市| 长顺县| 棋牌| 新蔡县| 轮台县| 通江县| 迁西县| 浙江省| 张北县| 拜城县| 饶河县| 河曲县| 河北省| 宜兴市| 北流市| 竹北市| 镇赉县| 西城区| 邵阳县| 林州市| 保靖县| 嘉鱼县| 宝鸡市| 巴马| 阿坝| 靖边县| 麻江县| 秦安县| 盐山县| 博野县| 鹿邑县| 临洮县| 巴青县| 高碑店市| 京山县|