2

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"

しかし、それもうまくいきません。

誰かが私に何が問題なのか教えてもらえますか?

ありがとう

4

1 に答える 1

6

を追加し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();
于 2012-04-05T17:15:16.563 に答える