[英]How to change HttpWebRequest to Httpclient
我在將示例中的代碼片段轉換為 http 客戶端時遇到問題。 每次代碼在時間戳計算中中斷。 你能幫我嗎? 我想做的是使用當前技術編寫相同的請求。 例如 httpclient 示例代碼
public byte[] GetTimeStamp(TimeStampModel model)
{
TimeStampRequestGenerator tsrq = new TimeStampRequestGenerator();
tsrq.SetCertReq(model.certReq);
BigInteger nonce = BigInteger.ValueOf(DateTime.Now.Ticks);
TimeStampRequest tsr = tsrq.Generate(model.digestMethod.Oid, model.hash, nonce);
byte[] data = tsr.GetEncoded();
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(_url);
req.Method = "POST";
req.ContentType = "application/timestamp-query";
req.ContentLength = data.Length;
if (!string.IsNullOrEmpty(_user) && !string.IsNullOrEmpty(_password))
{
string auth = string.Format("{0}:{1}", _user, _password);
req.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(auth), Base64FormattingOptions.None);
}
Stream reqStream = req.GetRequestStream();
reqStream.Write(data, 0, data.Length);
reqStream.Close();
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
if (res.StatusCode != HttpStatusCode.OK)
{
throw new Exception("Sunucu geçersiz bir yanıt döndürdü");
}
else
{
Stream resStream = new BufferedStream(res.GetResponseStream());
TimeStampResponse tsRes = new TimeStampResponse(resStream);
resStream.Close();
tsRes.Validate(tsr);
if (tsRes.TimeStampToken == null)
{
throw new Exception("Sunucu herhangi bir zaman damgası döndürmedi");
}
return tsRes.TimeStampToken.GetEncoded();
}
}
我有一個通用的 httpclientwrapper class。希望它有幫助
public async Task<TResponse> Post<TRequest, TResponse>(TRequest request, string urlToSend, string token)
{
try
{
using (HttpClient httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri(_url);
httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue(JwtBearerDefaults.AuthenticationScheme, token ?? "");
var serialized = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json");
var httpResponseMessage = await httpClient.PostAsync(urlToSend, serialized);
//httpResponseMessage.EnsureSuccessStatusCode();
if (httpResponseMessage.IsSuccessStatusCode)
{
var resStr = httpResponseMessage.Content.ReadAsStringAsync().Result;
var responseString = JsonConvert.DeserializeObject<TResponse>(httpResponseMessage.Content.ReadAsStringAsync().Result);
return responseString;
}
else if (httpResponseMessage.StatusCode == System.Net.HttpStatusCode.BadRequest)
{
var errorRes = httpResponseMessage.Content.ReadAsStringAsync().Result;
throw new Exception(errorRes);
}
throw new Exception(httpResponseMessage.ReasonPhrase);
}
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
在這段代碼中,
- 我從構造函數那里得到了令牌。
不要與它混淆。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.