[英]C# reading JSON from web API
我正在嘗試從此 API API Wykazu podatników VAT讀取數據
通過 HttpWebRequest 它正在工作:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://wl-test.mf.gov.pl:9091/wykaz-podatnikow/api/search/nips/3245174504?date=2019-09-27");
try
{
WebResponse response = request.GetResponse();
using (Stream responseStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, System.Text.Encoding.UTF8);
Console.WriteLine(reader.ReadToEnd());
}
}
catch (WebException ex)
{
WebResponse errorResponse = ex.Response;
using (Stream responseStream = errorResponse.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, System.Text.Encoding.GetEncoding("utf-8"));
String errorText = reader.ReadToEnd();
// log errorText
}
throw;
}
但是當我通過 WebClient 嘗試時:
var client = new WebClient();
client.Headers.Add("nips", "3245174504");
client.Headers.Add("date", "2019-09-27");
var response = client.DownloadString("https://wl-test.mf.gov.pl:9091/wykaz-podatnikow/api/search/nips/");
Console.WriteLine(response.ToString());
我收到此錯誤消息:
未處理的異常:System.Net.WebException:WebClient 請求期間發生異常。 ---> System.ArgumentException:必須使用適當的屬性或方法修改“日期”header。 參數名稱:System.Net.WebHeaderCollection.Add(String name, String value) 的 System.Net.WebHeaderCollection.ThrowOnRestrictedHeader(String headerName) 的名稱 System.Net.WebClient 的 System.Net.HttpWebRequest.set_Headers(WebHeaderCollection value)。 CopyHeadersTo(WebRequest request) at System.Net.WebClient.GetWebRequest(Uri address) at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request) --- 內部異常堆棧跟蹤結束 --- 在 System.Net.WebClient .DownloadDataInternal(Uri address, WebRequest& request) at System.Net.WebClient.DownloadString(Uri address) at System.Net.WebClient.DownloadString(String address)
我應該如何格式化第二個 Date 參數?
我建議使用較新的 HTTPClient,因為它是專門為 API 調用創建的 -
using (var x = new HttpClient())
{
var y = x.GetAsync("https://wl-test.mf.gov.pl:9091/wykaz-podatnikow/api/search/nips/3245174504?date=2019-09-27").Result;
var json = y.Content.ReadAsStringAsync().Result;
}
只是補充一下,請不要使用.Result,而是使用 async/await 運算符。
您是否將請求標頭與查詢參數混淆? 如果是這樣,您可能需要以下內容:
https://wl-test.mf.gov.pl:9091/wykaz-podatnikow/api/search?nips=3245174504&date=2019-09-27
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.