如何在Json Get请求中传递参数

时间:2012-12-13 06:29:16

标签: c# json

我有一个json URl,如“https://landfill.bugzilla.org/bugzilla-tip/jsonrpc.cgi?method=Product.get&params=[{"ids":"4"}]"

我想在c#程序中将其作为URL传递。下面是代码片段。我如何传递像上面的ids这样的论点?

try
{
    string url="https://landfill.bugzilla.org/bugzilla-tip/jsonrpc.cgi?method=Product.get";
    string ret = string.Empty;
    StreamWriter requestWriter;
    var webRequest = System.Net.WebRequest.Create(url) as HttpWebRequest;
    if (webRequest != null)
    {
        webRequest.Method = "GET";
        webRequest.ServicePoint.Expect100Continue = false;
        webRequest.Timeout = 20000;

        webRequest.ContentType = "application/json";        
    }
    HttpWebResponse resp = (HttpWebResponse)webRequest.GetResponse();
    Stream resStream = resp.GetResponseStream();
    StreamReader reader = new StreamReader(resStream);
    ret = reader.ReadToEnd();
    return ret;
}
catch (WebException exception)
{
    string responseText;
    using (var reader = new StreamReader(exception.Response.GetResponseStream()))
    {
        responseText = reader.ReadToEnd();
    }
    return responseText;
}
}

需要传递“ids”作为参数,请帮忙。

2 个答案:

答案 0 :(得分:2)

困难的方法是手动创建一个字符串。更好的方法是使用像JSON.Net(Newtonsoft.Json)这样的库...创建你的对象,在那个lib中使用JSON Serializer,你就可以参加比赛了。

get请求只是一个URL,它是一个字符串。

答案 1 :(得分:2)

如果你知道Url的样子,并确定该参数是Url-safe(如int),你只需使用String.Format来构造它:

 int id = 4;
 var url = String.Format("https://landfill.bugzilla.org/bugzilla-tip/"
       + "jsonrpc.cgi?method=Product.get&params=[{{\"ids\":\"{0}\"}}]", id);

请注意,这不是构建Url的好方法 - 它只适用于一次性使用代码,并且当您知道插入的参数是Url-safe时。适当的方法是使用Uri类或来自How to build a query string for a URL in C#?

的方法

如果你需要构造更复杂的参数(比如ID数组) - 使用jbehren建议进行JSON序列化。