我使用 .NET 6,我想使用 HttpClient.GetAsync 發送查詢。引數之一是 JSON,我不知道如何正確編碼。
這是我使用的檔案: https ://docs.datadoghq.com/api/latest/metrics/#query-timeseries-points
我已經嘗試過這種方法,但是我從服務器收到了一個錯誤的請求
public async Task<string> MetricAggregateAsync(string from, string to, string query)
{
AddDDApiKey();
AddDDApplicationKey();
//var content = new StringContent(json, Encoding.UTF8, "application/json");
//System.Web.Helpers.Json.Encore(query);
query = System.Web.HttpUtility.UrlEncode(query);
string content = "?from=" from "&to=" to "&query=" query;
HttpResponseMessage response = await _httpClient.GetAsync("v1/query" content);
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
uj5u.com熱心網友回復:
從您共享的檔案(謝謝!)看來,這個GET /query端點根本不需要 JSON 內容。試試這個版本的代碼:
public async Task<string> MetricAggregateAsync(string from, string to, string query)
{
AddDDApiKey();
AddDDApplicationKey();
query = System.Web.HttpUtility.UrlEncode(query);
string url = $"v1/query?from={from}&to={to}&query={query}";
HttpResponseMessage response = await _httpClient.GetAsync(url);
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
順便說一句,您可以使用一些技巧:
- 你可以洗掉那些
如果您將您的配置為在它發送的所有請求中包含一些標頭, 則 呼叫AddDDApiKey() AddDDApplicationKey()MetricAggregateAsync(以及使用此 API 的所有其他方法) ,例如:_httpClient
這應該在_httpClient.DefaultRequestHeaders.Add("DD-API-KEY", "TODO"); _httpClient.DefaultRequestHeaders.Add("DD-APPLICATION-KEY", "TODO");_httpClient實體化的相同位置(而不是在MetricAggregateAsync)中完成。 - 構建 URL 字串的一種更安全的方法是替換
和query = System.Web.HttpUtility.UrlEncode(query); string url = $"v1/query?from={from}&to={to}&query={query}";var urlParameters = System.Web.HttpUtility.ParseQueryString(""); // Strange way to start, but please bear with it :) urlParameters.Add("from", from); urlParameters.Add("to", to); urlParameters.Add("query", query); // Automatically encodes URL, so you don't have to do it manually string url = $"v1/query?{urlParameters}";
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/443118.html
上一篇:Django重定向到第二個URL
