iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
自我挑戰組

C# 學習之旅系列 第 13

ASP.NET MVC 從入門到放棄(Day13) -C# HttpClient 泛型功能介紹

  • 分享至 

  • xImage
  •  

接著來講講泛型的部分....

簡單來說泛型就是傳入值、傳回值不固定的情況下這時候就可以使用泛型...
我查了一下很多的網路上泛型的說法都是用工廠製作箱子去說明,但我覺得太不直觀了
以下用大家常用Call Api方式去說明泛型的用法/images/emoticon/emoticon31.gif

下面我會舉例一個Call Api 範例

假設我預期要從http://localhost:999/api/nk/Login Call這個api 傳入值為 Login Class 回傳值為 Result Class 為下方範例

   var user = apis.CallAPI<Result, Login>(Login, "/api/nk/Login");    

Login 類別

public class Login
{

   public string UserID { get; set; }
   public string UserPwd { get; set; }
}

Result 類別

public class Result
{
    public string Code { get; set; }
    public string Message { get; set; }
    public string Stauts { get; set; }
}

假設我預期要從http://localhost:999/api/nk/Member Call這個api 傳入值為 Member Class 回傳值為 Result2 Class 為下方範例

var user = apis.CallAPI<Result2, Member>(Member, "/api/nk/Member");    

Member 類別

public class Member
{

   public string MemberID { get; set; }
   public string MemberPwd { get; set; }
}

Result2 類別

public class Result
{
   public string Code2 { get; set; }
   public string Message2 { get; set; }
   public string Stauts2 { get; set; }
}

共用泛型 funtion

/// <summary>
/// 呼叫API
/// </summary>
/// <typeparam name="T">回傳之型別</typeparam>
/// <typeparam name="T1">傳入之型別</typeparam>
/// <param name="t1">傳入之型別</param>
/// <param name="strParaUri">API URI</param>
/// <returns>API回傳訊息</returns>
public static T CallAPI <T,T1>(T1 t1, string strParaUri)
{
   //Login
   T RetuenValue = default(T);
         
   try
   {
      HttpClient httpClient = new HttpClient();
      httpClient.BaseAddress = new Uri("http://localhost:999");
      HttpResponseMessage response = null;
      // 將 data 轉為 json
      string json = JsonConvert.SerializeObject(t1);
      // 將轉為 string 的 json 依編碼並指定 content type 存為 httpcontent
      HttpContent contentPost = new StringContent(json, Encoding.UTF8, "application/json");
      response = httpClient.PostAsync(strParaUri, contentPost).Result;
      if (response.IsSuccessStatusCode)
      {
                    
RetuenValue = JsonConvert.DeserializeObject<T>  (response.Content.ReadAsStringAsync().Result);
      }
    }
   catch (Exception ex)
   {
               
   }
   return RetuenValue;
   }
}

註解:使用泛型如果有回傳值需在static後面加上 T funtion名稱後面加上 T
如果有傳入值則要在funtion名稱後面加上 T1

由上面範例可以很清楚資料當我使用呼叫APIfuntion 傳入值、傳回值不固定的情況下(資料型態不見得每次都一樣),就可以泛型,好處在於可以節省程式碼。


上一篇
ASP.NET MVC 從入門到放棄(Day12) -Class funtion return void 函式寫法
下一篇
ASP.NET MVC 從入門到放棄(Day14)- Html Css 結構介紹
系列文
C# 學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言