• ASP.NET Web Api 实践系列(二)Get/Post方式调用Web Api


        本文给出Get/Post方式访问Web Api的帮助方法,对于Put/Delete方式的调用跟Post调用类似。

        一、Web Api调用帮助类

        下面给出Web Api调用帮助类的代码:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Net.Http;
      4 using System.Net.Http.Headers;
      5 using System.Text;
      6 using System.Web;
      7 
      8 namespace TestApi
      9 {
     10     /// <summary>
     11     /// WebApi访问帮助类
     12     /// </summary>
     13     public class WebApiHepler
     14     {
     15         /// <summary>
     16         /// 生成最终URL
     17         /// </summary>
     18         /// <param name="baseUrl">基准URL(不含查询串)</param>
     19         /// <param name="dictParam">查询参数字典</param>
     20         /// <returns>最终URL</returns>
     21         private static string GetLastUrl(string baseUrl, Dictionary<string, string> dictParam)
     22         {
     23             var sbUrl = new StringBuilder(baseUrl);
     24             if (dictParam != null && dictParam.Count > 0)
     25             {
     26                 sbUrl.Append("?");
     27                 int index = 0;
     28                 foreach (var item in dictParam)
     29                 {
     30                     sbUrl.Append(string.Format("{0}={1}", item.Key,
     31                         HttpUtility.UrlEncode(item.Value, Encoding.UTF8)));
     32                     if (index < dictParam.Count - 1)
     33                     {
     34                         sbUrl.Append("&");
     35                     }
     36                     index++;
     37                 }
     38             }
     39             var url = sbUrl.ToString();
     40             return url;
     41         }
     42 
     43         /// <summary>
     44         /// GET方式调用Web Api
     45         /// </summary>
     46         /// <param name="baseUrl">基准URL(不含查询串)</param>
     47         /// <param name="dictParam">查询参数字典</param>
     48         /// <param name="result">返回数据(Json格式)</param>
     49         /// <param name="errMsg">出错信息</param>
     50         /// <returns>成功与否</returns>
     51         public static bool Get(string baseUrl, Dictionary<string, string> dictParam, out string result, out string errMsg)
     52         {
     53             errMsg = string.Empty;
     54             result = string.Empty;
     55             try
     56             {
     57                 using (var client = new HttpClient())
     58                 {
     59                     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
     60                     var url = GetLastUrl(baseUrl, dictParam);
     61                     var tmpResult = client.GetAsync(url).Result;
     62                     tmpResult.EnsureSuccessStatusCode();
     63                     result = tmpResult.Content.ReadAsStringAsync().Result;
     64                     return true;
     65                 }
     66             }
     67             catch (Exception ex)
     68             {
     69                 errMsg = ex.Message;
     70                 return false;
     71             }
     72             
     73         }
     74 
     75         /// <summary>
     76         /// POST方式调用Web Api
     77         /// </summary>
     78         /// <param name="baseUrl">基准URL(不含查询串)</param>
     79         /// <param name="dictParam">查询参数字典</param>
     80         /// <param name="parseData">传递实体数据(Json格式)</param>
     81         /// <param name="result">返回数据(Json格式)</param>
     82         /// <param name="errMsg">出错信息</param>
     83         /// <returns>成功与否</returns>
     84         public static bool Post(string baseUrl, Dictionary<string, string> dictParam, string parseData, out string result, out string errMsg)
     85         {
     86             errMsg = string.Empty;
     87             result = string.Empty;
     88             try
     89             {
     90                 using (var client = new HttpClient())
     91                 {
     92                     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
     93                     var url = GetLastUrl(baseUrl, dictParam);
     94                     var content = new StringContent(parseData, Encoding.UTF8);
     95                     content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
     96                     var tmpResult = client.PostAsync(url, content).Result;
     97                     tmpResult.EnsureSuccessStatusCode();
     98                     result = tmpResult.Content.ReadAsStringAsync().Result;
     99                     return true;
    100                 }
    101             }
    102             catch (Exception ex)
    103             {
    104                 errMsg = ex.Message;
    105                 return false;
    106             }
    107         }
    108     }
    109 }

        二、部分说明

        对以上的代码作部分说明:

    • GetLastUrl方法用于根据基准URL和查询参数字典获取最终URL
    • client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));这句代码表示希望服务返回Json字符串。
    • content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 表示以Json格式传递实体内容。
  • 相关阅读:
    CSS文字的处理
    typeof 检测变量的数据类型
    BZOJ 1257: [CQOI2007]余数之和
    BZOJ 1218: [HNOI2003]激光炸弹
    BZOJ 3251: 树上三角形
    BZOJ 3916: [Baltic2014]friends
    BZOJ 1610: [Usaco2008 Feb]Line连线游戏 暴力
    BZOJ 1593 [Usaco2008 Feb]Hotel 旅馆 双倍经验,线段树
    BZOJ 1096 [ZJOI2007]仓库建设 BZOJ 3437 小P的牧场 BZOJ 3156 防御准备 斜率优化dp
    BZOJ 2582 : Bovine Alliance DFS
  • 原文地址:https://www.cnblogs.com/huatao/p/4720595.html
Copyright © 2020-2023  润新知