亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

C# 如何使用HttpClient模擬請求

發布時間:2020-10-26 17:34:42 來源:億速云 閱讀:605 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關C# 如何使用HttpClient模擬請求,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

接口定義

/// <summary>
/// 獲取時間戳(毫秒).
/// </summary>
/// <param name="dateTime"></param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
[Route("DateTime/GetTimeStamp")]
public string GetTimeStamp([Required] MyDateTime dateTime)
{
  // 沒有簽名或者簽名不匹配返回null.
  if (!Request.Headers.TryGetValue("X-Sign", out var xSign) || GenerateSign(dateTime) != xSign)
  {
    return $"簽名{xSign}驗證失敗";
  }

  // 返回時間戳
  var time = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second);
  return ((time.ToUniversalTime().Ticks - 621355968000000000) / 1000).ToString();
}

其中入參定義

/// <summary>
/// 自定義時間類.
/// </summary>
public class MyDateTime
{
  /// <summary>
  /// 年.
  /// </summary>
  public int Year { get; set; }

  /// <summary>
  /// 月.
  /// </summary>
  public int Month { get; set; }

  /// <summary>
  /// 日.
  /// </summary>
  public int Day { get; set; }

  /// <summary>
  /// 時.
  /// </summary>
  public int Hour { get; set; }

  /// <summary>
  /// 分.
  /// </summary>
  public int Minute { get; set; }

  /// <summary>
  /// 秒.
  /// </summary>
  public int Second { get; set; }
}

簽名方法

簽名的話,我們簡單的把入參做keyValue處理,這里對key進行排序,然后返回MD5加密后的結果就行了

/// <summary>
/// 生成簽名.
/// </summary>
/// <param name="dateTime"></param>
/// <returns></returns>
private async Task<string> GenerateSign(MyDateTime dateTime)
{
  // 利用反射獲取屬性及對應的值,根據key的Name排序
  var properties = dateTime.GetType().GetProperties().OrderBy(e => e.Name);

  // 使用一個字典來存放
  var signDic = new Dictionary<string, string>();
  foreach (var property in properties)
  {
    var key = property.Name;
    var value = property.GetValue(dateTime)&#63;.ToString();

    signDic.Add(key, value);
  }

  // 用UrlEncoded處理
  var sign = await new FormUrlEncodedContent(signDic).ReadAsStringAsync().ConfigureAwait(false);

  // 返回MD5加密后的結果
  return Convert.ToBase64String(new MD5CryptoServiceProvider().ComputeHash(Encoding.UTF8.GetBytes(sign)));
}

使用HttpClient模擬請求

// 創建HttpClient實例
var httpClient = new HttpClient();

// 請求的時間,2020-10-01 08:10:30
var requestTime = new MyDateTime
{
  Year = 2020,
  Month = 10,
  Day = 1,
  Hour = 8,
  Minute = 10,
  Second = 30,
};

// 設置HttpRequestMessage中的Content。
// 請求入參,我們接口定義的入參是dateTime,所以這里的Key也是dateTime
var requestDic = new Dictionary<string, string>();
requestDic.Add("dateTime", JsonConvert.SerializeObject(requestTime));
var encodedContent = await new FormUrlEncodedContent(requestDic).ReadAsStringAsync().ConfigureAwait(false);
var httpContent = new StringContent(encodedContent, Encoding.UTF8, "application/x-www-form-urlencoded");

// 添加簽名頭
var sign = await GenerateSign(requestTime);
httpContent.Headers.Add("X-Sign", sign);

// 生成Request的Message
var httpRequestMessage = new HttpRequestMessage
{
  Method = HttpMethod.Post, // 請求方式
  RequestUri = new Uri("http://localhost:5000/DateTime/GetTimeStamp"), // 請求地址
  Content = httpContent, // 請求內容
};

// 在HttpRequestMessage中可以任意的添加請求頭
httpRequestMessage.Headers.Add("GitHub", "XgHao");

// 發送請求
var response = await httpClient.SendAsync(httpRequestMessage).ConfigureAwait(false);
var timeStamp = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

捕獲請求

這里我們使用Fiddler來捕獲請求

可以看到,我們的簽名及我們自己加的其他Header,還有計算返回的時間戳。

C# 如何使用HttpClient模擬請求

切換到WebForms可以看到請求的參數

C# 如何使用HttpClient模擬請求

說明使用HttpClient發送請求成功了。

以上就是C# 如何使用HttpClient模擬請求,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

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

AI

台湾省| 天长市| 定结县| 抚宁县| 永清县| 临安市| 石嘴山市| 万州区| 盖州市| 清原| 兴山县| 赣榆县| 资中县| 读书| 高要市| 古田县| 永德县| 郎溪县| 墨竹工卡县| 凤阳县| 汉阴县| 谷城县| 金山区| 炎陵县| 平顶山市| 曲水县| 卢湾区| 龙山县| 宁津县| 丰县| 磴口县| 阿拉善盟| 五台县| 龙里县| 潮安县| 怀远县| 台南县| 宁明县| 屯留县| 水富县| 保定市|