如何从c#mvc控制器调用带有多个json参数的API
我想从控制器调用WebAPI。我还想从控制器传递多个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
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