在网上查到了一些例子加上自己的一些修改,改写了这个方法
private async Task<string> InvokeWebapi(string strurl, string strapi, string strtype, string strJson)
{
HttpClient client = new HttpClient();
//client.DefaultRequestHeaders.Add("","");
client.BaseAddress = new Uri(strurl);
client.Timeout = TimeSpan.FromSeconds(510);
string result = "";
if (strtype.ToLower() == "post")
{
// var content = new FormUrlEncodedContent(dics);
var content = new StringContent(strJson);
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
content.Headers.ContentLength = (Encoding.UTF8.GetBytes(strJson)).Length;
HttpResponseMessage response = client.PostAsync(strapi, content).Result;
if (response.IsSuccessStatusCode)
{
result = await response.Content.ReadAsStringAsync();
}
}
else if (strtype.ToLower() == "get")
{
HttpResponseMessage response = client.GetAsync(strapi).Result;
if (response.IsSuccessStatusCode)
{
result = await response.Content.ReadAsStringAsync();
}
}
//对结果处理
JObject jo = new JObject();
jo = (JObject)JsonConvert.DeserializeObject(result);
var nRet = jo.ToString();//如果要解析里面的某个实体对象:((JObject)jo["data"]).toString();//data是对应的字段名称
return nRet;
}
/// <summary>
/// 解析JSON字符串生成对象实体
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="json">json字符串(eg.{"ID":"112","Name":"石子儿"})</param>
/// <returns>对象实体</returns>
public static T DeserializeJsonToObject<T>(string json) where T : class
{
try
{
JsonSerializer serializer = new JsonSerializer();
StringReader sr = new StringReader(json);
object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T));
T t = o as T;
return t;
}
catch (Exception)
{
return null;
}
}
调用如下
string sJson = JsonConvert.SerializeObject(new { id, name});//api传入是json字符串
string strResult= InvokeWebapi("网址", "网站/api/控制器名称", "POST", sJson).Wait();
api = DeserializeJsonToObject<ApiResult>(strResult);//api是实体类
来源:CSDN
作者:寒冰的暖
链接:https://blog.csdn.net/u012963782/article/details/104455191