ASP.NET MVC 从入门到放弃(Day13) -C# HttpClient 泛型功能介绍

接着来讲讲泛型的部分....

简单来说泛型就是传入值、传回值不固定的情况下这时候就可以使用泛型...
我查了一下很多的网路上泛型的说法都是用工厂制作箱子去说明,但我觉得太不直观了
以下用大家常用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 传入值、传回值不固定的情况下(资料型态不见得每次都一样),就可以泛型,好处在於可以节省程序码。


<<:  Day03 UIKit 02 - App Delegate

>>:  Day03 Federated plugins (联合插件)

[ Day 16 ] - 事件

事件 指的是在 DOM 上所发生的事件,换句话是可以是特定的动作被触发後,必须要执行对应的事情。 (...

【DAY 17】微软生产力平台 Microsoft Power Platform 补充 — Code 与 No-Code

【DAY 17】微软生产力平台 Microsoft Power Platform 补充 — Code...

Day 12 实作资料库

前言 今天会实作资料库的结构。我们总共需要实作三个 table 的 scheme,分别是 users...

出生第39天 打疫苗日

原本想回诊禾馨的时候顺便带幼兽去小禾馨打满一个月可以打的B肝疫苗,但完全预约不到,打电话去问说有没有...

[Day9] - Docker Compose 介绍与实作

在上一篇我们学习了 Docker 的基础操作,相信大家都可以感觉到 Docker 惊人的方便性吧! ...