本文给出Get/Post方式访问Web Api的帮助方法,对于Put/Delete方式的调用跟Post调用类似。

一、Web Api调用帮助类

下面给出Web Api调用帮助类的代码:

using System;

using System.Collections.Generic;

using System.Net.Http;

using System.Net.Http.Headers;

using System.Text;

using System.Web;

namespace TestApi

{

///

/// WebApi访问帮助类

///

public class WebApiHepler

{

///

/// 生成最终URL

///

/// 基准URL(不含查询串)

/// 查询参数字典

/// 最终URL

private static string GetLastUrl(string baseUrl, Dictionary dictParam)

{

var sbUrl = new StringBuilder(baseUrl);

if (dictParam != null && dictParam.Count > 0)

{

sbUrl.Append("?");

int index = 0;

foreach (var item in dictParam)

{

sbUrl.Append(string.Format("{0}={1}", item.Key,

HttpUtility.UrlEncode(item.Value, Encoding.UTF8)));

if (index

{

sbUrl.Append("&");

}

index++;

}

}

var url = sbUrl.ToString();

return url;

}

///

/// GET方式调用Web Api

///

/// 基准URL(不含查询串)

/// 查询参数字典

/// 返回数据(Json格式)

/// 出错信息

/// 成功与否

public static bool Get(string baseUrl, Dictionary dictParam, out string result, out string errMsg)

{

errMsg = string.Empty;

result = string.Empty;

try

{

using (var client = new HttpClient())

{

client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

var url = GetLastUrl(baseUrl, dictParam);

var tmpResult = client.GetAsync(url).Result;

tmpResult.EnsureSuccessStatusCode();

result = tmpResult.Content.ReadAsStringAsync().Result;

return true;

}

}

catch (Exception ex)

{

errMsg = ex.Message;

return false;

}

}

///

/// POST方式调用Web Api

///

/// 基准URL(不含查询串)

/// 查询参数字典

/// 传递实体数据(Json格式)

/// 返回数据(Json格式)

/// 出错信息

/// 成功与否

public static bool Post(string baseUrl, Dictionary dictParam, string parseData, out string result, out string errMsg)

{

errMsg = string.Empty;

result = string.Empty;

try

{

using (var client = new HttpClient())

{

client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

var url = GetLastUrl(baseUrl, dictParam);

var content = new StringContent(parseData, Encoding.UTF8);

content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

var tmpResult = client.PostAsync(url, content).Result;

tmpResult.EnsureSuccessStatusCode();

result = tmpResult.Content.ReadAsStringAsync().Result;

return true;

}

}

catch (Exception ex)

{

errMsg = ex.Message;

return false;

}

}

}

}

二、部分说明

对以上的代码作部分说明:

GetLastUrl方法用于根据基准URL和查询参数字典获取最终URL

client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));这句代码表示希望服务返回Json字符串。

content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 表示以Json格式传递实体内容。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐