c# - C# 从 Web API 读取 JSON
问题描述
我正在尝试从此 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:必须使用适当的属性或方法修改“日期”标头。参数名称: System.Net.WebHeaderCollection.Add(String name, String value) at System.Net.HttpWebRequest.set_Headers(WebHeaderCollection value) at System.Net.WebClient.的 System.Net.WebHeaderCollection.ThrowOnRestrictedHeader(String headerName) 的名称。 CopyHeadersTo(WebRequest request) at System.Net.WebClient.GetWebRequest(Uri address) at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request) --- 内部异常堆栈跟踪结束 --- 在 System.Net.WebClient .DownloadDataInternal(Uri 地址, WebRequest&
我应该如何格式化第二个 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 运算符。
推荐阅读
- python - 如何更改模型中日期字段的格式?
- wpf - 获取模板中内容的实际大小以绘制不规则形状的按钮
- bash - 如何将应用程序链接到 usr/local/bin,以便可以在终端中全局调用它。苹果电脑
- python-3.x - PyTorch DLL 加载失败
- java - 在每 4 个和 3 个位置之后,在 java 中拆分 String 的最佳方法是什么?
- build - 构建失败并给出此错误,如何读取安全上下文以获取正确的错误?
- verilog - Quartus 2 - 无输出依赖于输入/输出引脚卡住
- ios - 如何在 ios swift 中从原型单元获取数据到控制器并从中更新模型
- php - 如何在 Laravel 5.7 中限制数据输入到数据库
- sumologic - Sumologic 仪表板配置为代码