我正在嘗試使用大括號使用 REST API,但我不知道如何通過 HttpClient.GetFromJsonAsync 將它們發送為未轉義的。
string readKey = "1VQXp8053OlOs05XcoWX3L46TEQ4JaPnPtJMwUH6k0xUkgXWMd";
string endpoint = "https://api.cosmicjs.com/v2/buckets/ffm-blog-blog/objects?read_key={readKey}";
string queryOperator = "&query=";
string query = "{type:"posts"}";
//Working URI (in browser and Postman) : https://api.cosmicjs.com/v2/buckets/ffm-blog-blog/objects?read_key=1VQXp8053OlOs05XcoWX3L46TEQ4JaPnPtJMwUH6k0xUkgXWMd&query={"type":"posts"}
我嘗試了不同的方法:
string uriA = endpoint queryOperator query;
string uriB = endpoint queryOperator Uri.UnescapedDataString(query);
Uri uriC = new Uri(endpoint queryOperator query);
Uri uriD = new Uri(endpoint queryOperator Uri.UnescapedDataString(query);
Uri uriE = new Uri(Uri.UnescapedDataString(endpoint queryOperator query);
...
我嘗試使用 HttpClient 的任何方法:
CosmicResponse cosmicReponse = await _http.GetFromJsonAsync<CosmicResponse>(uri);
我總是得到相同的結果:
System.Net.Http.HttpRequestException: TypeError: 獲取失敗
HttpClient 發送的 URI 始終是:
https://api.cosmicjs.com/v2/buckets/ffm-blog-blog/objects?read_key=xxxx&query={"type":"posts"}
當然,我不作業。
它在發送沒有查詢部分的請求時起作用:
string uri = "https://api.cosmicjs.com/v2/buckets/ffm-blog-blog/objects?read_key=xxxx";
CosmicResponse cosmicReponse = await _http.GetFromJsonAsync<CosmicResponse>(uri);
但是,我需要使用查詢部分。
我知道在 API 中使用花括號是不好的做法,但我沒有撰寫 API,我只是想使用它。
有人會碰巧知道如何使用 HttpClient 發送“{”和“}”而不是“{”和“}”?
完整代碼
public async Task<List<Post>> GetAllPosts()
{
HttpClient http = new();
string _rootUrl = "https://api.cosmicjs.com/v2/buckets/ffm-blog-blog";
string _readKey = "1VQXp8053OlOs05XcoWX3L46TEQ4JaPnPtJMwUH6k0xUkgXWMd";
string endpoint = $"{_rootUrl}/objects?read_key={_readKey}";
string query = "{type:"posts"}";
Uri uri = new Uri(Uri.UnescapeDataString(endpoint "&query=" query));
CosmicResponse cosmicReponse = await http.GetFromJsonAsync<CosmicResponse>(uri);
List<Post> posts = new();
foreach (CosmicPost c in cosmicReponse.Objects)
{
posts.Add(GetPostFromCosmic(c));
}
return posts;
}
最后的話
事實證明這是一個 CORS 問題。由于 Postman 不強制執行 CORS 策略,我錯誤地認為問題與 HttpClient 有關。我通過代理解決了這個問題。
uj5u.com熱心網友回復:
最好讓圖書館為您完成作業。使用NameValueCollection回傳HttpUtility.ParseQueryString(請注意,它們回傳不同的派生型別HttpValueCollection,您無法自行初始化)。在此處查看更多資訊。
由于您沒有給出類定義,我將型別切換為,object以便測驗代碼可以運行:
static async Task<object> GetAllPosts()
{
HttpClient http = new();
string _rootUrl = "https://api.cosmicjs.com/v2/buckets/ffm-blog-blog";
string _readKey = "1VQXp8053OlOs05XcoWX3L46TEQ4JaPnPtJMwUH6k0xUkgXWMd";
var query = HttpUtility.ParseQueryString("");
query.Add("read_key", _readKey);
query.Add("query", "{\"type\":\"posts\"}");
string endpoint = $"{_rootUrl}/objects?" query.ToString();
return (await http.GetFromJsonAsync<object>(endpoint))!;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/373519.html
下一篇:用于從回呼url接收資料的API
