您的位置:首页 > 编程语言 > ASP

ASP.NET Web Api 实践系列(二)Get/Post方式调用Web Api

2015-08-11 11:57 651 查看
本文给出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
{
/// <summary>
/// WebApi访问帮助类
/// </summary>
public class WebApiHepler
{
/// <summary>
/// 生成最终URL
/// </summary>
/// <param name="baseUrl">基准URL(不含查询串)</param>
/// <param name="dictParam">查询参数字典</param>
/// <returns>最终URL</returns>
private static string GetLastUrl(string baseUrl, Dictionary<string, string> 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 < dictParam.Count - 1)
{
sbUrl.Append("&");
}
index++;
}
}
var url = sbUrl.ToString();
return url;
}

/// <summary>
/// GET方式调用Web Api
/// </summary>
/// <param name="baseUrl">基准URL(不含查询串)</param>
/// <param name="dictParam">查询参数字典</param>
/// <param name="result">返回数据(Json格式)</param>
/// <param name="errMsg">出错信息</param>
/// <returns>成功与否</returns>
public static bool Get(string baseUrl, Dictionary<string, string> 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;
}

}

/// <summary>
/// POST方式调用Web Api
/// </summary>
/// <param name="baseUrl">基准URL(不含查询串)</param>
/// <param name="dictParam">查询参数字典</param>
/// <param name="parseData">传递实体数据(Json格式)</param>
/// <param name="result">返回数据(Json格式)</param>
/// <param name="errMsg">出错信息</param>
/// <returns>成功与否</returns>
public static bool Post(string baseUrl, Dictionary<string, string> 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格式传递实体内容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: