WebClient.DownloadString(url)不适用于第二个参数

本文关键字:适用于 第二个 参数 不适用 DownloadString url WebClient | 更新日期: 2023-09-27 18:30:13

我正在使用WebClient.DownloadString()方法下载一些数据。我正在使用以下代码:

static void Main(string[] args)
    {
        string query = "select+%3farticle+%3fmesh+where+{+%3farticle+a+npg%3aArticle+.+%3farticle+npg%3ahasRecord+[+dc%3asubject+%3fmesh+]+.+filter+regex%28%3fmesh%2c+'"blood'"%2c+'"i'"%29+}";
        NameValueCollection queries = new NameValueCollection();
        queries.Add("query", query);
        //queries.Add("output", "sparql_json");
        using (WebClient wc = new WebClient())
        {
            wc.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
            wc.QueryString = queries;
            string result = wc.DownloadString("http://data.nature.com/sparql");
            Console.WriteLine(result);
        }
        Console.ReadLine();
    }

有了这段代码,tt工作得很好,并给我一个xml字符串作为输出。但我想得到一个JSON输出,因此我取消了对行的评论

queries.Add("output", "sparql_json");

并且执行了相同的程序,并且它似乎正在从服务器获取错误消息。

然而,如果我尝试使用web浏览器并使用相同的url(如下所示),它会给我一个预期的JSON:在浏览器中工作的URL

我想知道可能是什么问题。尤其是当它在浏览器中工作而不使用网络客户端时。网络客户端在这里做什么不同吗?

请注意,我还尝试将查询指定为

query + "&output=sparql_json"

但这也不起作用。

有人能告诉我可能出了什么问题吗?

感谢

WebClient.DownloadString(url)不适用于第二个参数

添加wc.Headers.Add("Accept","application/json");。这是我测试的完整来源

string query = "select ?article ?mesh where { ?article a npg:Article . ?article npg:hasRecord [ dc:subject ?mesh ] . filter regex(?mesh, '"blood'", '"i'") }";
NameValueCollection queries = new NameValueCollection();
queries.Add("query", query);
queries.Add("output", "sparql_json");
using (WebClient wc = new WebClient())
{
    wc.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
    wc.Headers.Add("Accept","application/json");
    wc.QueryString = queries;
    string result = wc.DownloadString("http://data.nature.com/sparql");
    Console.WriteLine(result);
}
Console.ReadLine();