如何从c#mvc控制器调用带有多个json参数的API

如何从c#mvc控制器调用带有多个json参数的API,c#,asp.net-web-api,C#,Asp.net Web Api,我想从控制器调用WebAPI。我还想从控制器传递多个json参数。那么,如何用api绑定这些数据呢 var jsonData = "{\"jsonrpc\":2.0," + "\"method\":eth_blockNumber," + "\"params\":[]," + "\"id\":83}"; HttpWebRequest webreq = (HttpWebRequest)WebReque

我想从控制器调用WebAPI。我还想从控制器传递多个json参数。那么,如何用api绑定这些数据呢

 var jsonData = "{\"jsonrpc\":2.0," +
                "\"method\":eth_blockNumber," +
                "\"params\":[]," +
                "\"id\":83}";

HttpWebRequest webreq = (HttpWebRequest)WebRequest.Create(string.Format("https://mainnet.infura.io/qhggowRXK7HIgXB0NEyw",jsonData));
webreq.Method = "POST";
webreq.ContentType = "application/json";
using (var streamWriter = new StreamWriter(webreq.GetRequestStream()))
{
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    //var resToWrite = serializer.Deserialize<Dictionary<string, object>>(jsonData);
    //streamWriter.Write(jsonData);
    streamWriter.Flush();
    streamWriter.Close();
}
WebResponse response = webreq.GetResponse();
var streamReader = new StreamReader(response.GetResponseStream());
var result = streamReader.ReadToEnd();
var jsonData=“{\”jsonrpc\”:2.0+
“方法”:eth\U块号+
“\”参数\:[],”+
“\“id\”:83}”;
HttpWebRequest webreq=(HttpWebRequest)WebRequest.Create(string.Format(“https://mainnet.infura.io/qhggowRXK7HIgXB0NEyw“,jsonData));
webreq.Method=“POST”;
webreq.ContentType=“应用程序/json”;
使用(var streamWriter=newstreamwriter(webreq.GetRequestStream()))
{
JavaScriptSerializer serializer=新的JavaScriptSerializer();
//var resToWrite=serializer.Deserialize(jsonData);
//streamWriter.Write(jsonData);
streamWriter.Flush();
streamWriter.Close();
}
WebResponse=webreq.GetResponse();
var streamReader=newstreamreader(response.GetResponseStream());
var result=streamReader.ReadToEnd();

您可以使用HttpClient:

private static readonly HttpClient client = new HttpClient();
var values = new Dictionary<string, string>
{
   { "param1", "value1" },
   { "param2", "value2" }
};
*var content = new FormUrlEncodedContent(values);
var response = await client.PostAsync("https://mainnet.infura.io/qhggowRXK7HIgXB0NEyw", content);
var responseString = await response.Content.ReadAsStringAsync();

您只需按如下方式调用API:

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri("https://mainnet.infura.io/qhggowRXK7HIgXB0NEyw");
    client.DefaultRequestHeaders.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    var requestBody = new
    {
        jsonrpc = "2.0",
        method = "eth_blockNumber",
        @params = new int[]{},
        id = 83,
    };

    HttpResponseMessage apiResponse = await client.PostAsJsonAsync(client.BaseAddress, requestBody);

    if (apiResponse.IsSuccessStatusCode)
    {
        var documentResponse = await apiResponse.Content.ReadAsStringAsync();
        dynamic response = JsonConvert.DeserializeObject(documentResponse);
    }                
}
需要添加Http.Formatting.Extension的nuget包:

Install-Package System.Net.Http.Formatting.Extension

旁注:您将在一个动态变量中得到响应,此外,您还可以在一个模型中反序列化响应,这不包括在这个答案中

AJAX与C代码有什么关系?该首字母缩略词仅指Javascript。它在Postman中运行良好。当我拜访Postman时,它向我提供以下结果
{“jsonrpc”:“2.0”,“id”:83,“result”:“0x597732”}
使用POST方法并在正文中使用raw,在代码
{“jsonrpc”:“2.0”,“method”:“eth_blockNumber”,“params”:[],“id”:83}
没有理由在.NET 4.5及更高版本(即所有受支持的.NET版本)中使用WebClient。例如,如果服务器返回重定向响应,它可能会抛出,这是完全正常的。只是添加了WebClient,因为问题没有指定使用的框架。但我会用这些信息更新答案!谢谢你的帮助。现在我正在使用.NET4.6.1。我也尝试过上面的代码。所以我不知道如何在其中写入参数。就像上面的例子一样,它是两个字符串参数。同样在我的代码中,我使用的是第三方的api,所以我应该如何编写它。请把这个遮光。我很高兴它对你有帮助。你可以接受我的回答来帮助我。如果您知道参数的名称,可以将“param1”和“param2”替换为它们的名称。然后,您可以用要发送的值替换“value1”和“value2”。示例:谢谢。我正在尝试。请你帮我把票投上去好吗。我正在应用这个解决方案,也许我们会得到最好的结果。。。。
Install-Package System.Net.Http.Formatting.Extension