简体   繁体   English

C# 从 web API 读取 JSON

[英]C# reading JSON from web API

I am trying to read data from this API API Wykazu podatników VAT我正在尝试从此 API API Wykazu podatników VAT读取数据

Thru HttpWebRequest it's working:通过 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;
    }

But when I try it thru WebClient:但是当我通过 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());

I got this error message:我收到此错误消息:

Unhandled Exception: System.Net.WebException: An exception occurred during a WebClient request.未处理的异常:System.Net.WebException:WebClient 请求期间发生异常。 ---> System.ArgumentException: The 'date' header must be modified using the appropriate property or method. ---> System.ArgumentException:必须使用适当的属性或方法修改“日期”header。 Parameter name: name at System.Net.WebHeaderCollection.ThrowOnRestrictedHeader(String headerName) at System.Net.WebHeaderCollection.Add(String name, String value) at System.Net.HttpWebRequest.set_Headers(WebHeaderCollection value) at System.Net.WebClient.CopyHeadersTo(WebRequest request) at System.Net.WebClient.GetWebRequest(Uri address) at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request) --- End of inner exception stack trace --- at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request) at System.Net.WebClient.DownloadString(Uri address) at System.Net.WebClient.DownloadString(String address)参数名称: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)

How should I format the second Date parameter?我应该如何格式化第二个 Date 参数?

I would recommend using the newer HTTPClient as it is specifically created for API calls -我建议使用较新的 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;
    }

Just to add, please don't use.Result, instead use the async/await operators.只是补充一下,请不要使用.Result,而是使用 async/await 运算符。

Are you mistaking request headers with Query Parameters?您是否将请求标头与查询参数混淆? if so you might want the following instead:如果是这样,您可能需要以下内容:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM