【问题标题】:C# reading JSON from web APIC# 从 Web API 读取 JSON
【发布时间】:2019-09-27 22:37:10
【问题描述】:

我正在尝试从此 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.ThrowOnRestrictedHeader(字符串 headerName) 在 System.Net.WebHeaderCollection.Add(字符串名称,字符串值) 在 System.Net.HttpWebRequest.set_Headers(WebHeaderCollection 值) 在 System.Net.WebClient.CopyHeadersTo(WebRequest 请求) 在 System.Net.WebClient.GetWebRequest(Uri 地址) 在 System.Net.WebClient.DownloadDataInternal(Uri 地址,WebRequest& 请求) --- 内部异常堆栈跟踪结束 --- 在 System.Net.WebClient.DownloadDataInternal(Uri 地址,WebRequest& 请求) 在 System.Net.WebClient.DownloadString(Uri 地址) 在 System.Net.WebClient.DownloadString(字符串地址)

我应该如何格式化第二个日期参数?

【问题讨论】:

  • 您确定要在表头中添加这些参数吗?一旦它是一个“获取”请求,它就应该像第一个示例一样在 url 上。
  • 如果您想更改日期参数,请查看此链接:link

标签: c# json


【解决方案1】:

我建议使用较新的 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 运算符。

【讨论】:

【解决方案2】:

您是否将请求标头与查询参数混淆?如果是这样,您可能需要以下内容:

https://wl-test.mf.gov.pl:9091/wykaz-podatnikow/api/search?nips=3245174504&date=2019-09-27

【讨论】:

    猜你喜欢
    • 2018-04-28
    • 2014-07-28
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    相关资源
    最近更新 更多