C#4.5 添加了异步调用Web Api 。

如果你的项目是4.5以上版本,可以直接参考官方文档。

http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from-a-net-client

现在项目使用的是C# 4.0 ,需要对HttpClient 进行修改。

当然了你要先添加两个引用 Microsoft.Net.Http和Microsoft.AspNet.WebApi.Client

下面是改造后的HttpClient

public class ResultMessage
{
public string Code { get; set; }
public string Message { get; set; }
public string Content { get; set; }
} public class HttpClientHelper
{
public static string RequestUrl = "http://localhost:1282/"; /// <summary>
/// HttpClient实现Get请求
/// </summary>
public static ResultMessage Get(string url)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(RequestUrl);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); Task<HttpResponseMessage> response = client.GetAsync(url);
var resultMsg = new ResultMessage();
if (response.Result.IsSuccessStatusCode)
{
Task<string> content = response.Result.Content.ReadAsStringAsync();
string resultjson = content.Result;
resultMsg = JsonConvert.DeserializeObject<ResultMessage>(resultjson);
Console.WriteLine("{0}\t{1}\t{2}", resultMsg.Code, resultMsg.Message, resultMsg.Content);
}
else
{
resultMsg.Code = response.Result.StatusCode.ToString();
resultMsg.Message = response.Result.ReasonPhrase;
Console.WriteLine("{0} ({1})", (int) response.Result.StatusCode, response.Result.ReasonPhrase);
} return resultMsg;
}
} /// <summary>
/// HttpClient实现Post请求
/// 执行服务方法
/// </summary>
public static ResultMessage Post(string code, string name)
{
string url = RequestUrl + "api/Biz/Exec"; using (var client = new HttpClient())
{
client.BaseAddress = new Uri(RequestUrl);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var content = new FormUrlEncodedContent(new Dictionary<string, string>
{
{"code",code}
{"name",name},
});
var resultMsg = new ResultMessage();
Task<HttpResponseMessage> response = client.PostAsync(url, content);
//延时处理
if (response.Result.IsSuccessStatusCode)
{
Task<string> con = response.Result.Content.ReadAsStringAsync();
string resultjson = con.Result;
resultMsg = JsonConvert.DeserializeObject<ResultMessage>(resultjson);
}
else
{
resultMsg.Code = response.Result.StatusCode.ToString();
resultMsg.Message = response.Result.ReasonPhrase;
} return resultMsg;
}
}
}

  

使用HttpClient 调用Web Api的更多相关文章

  1. 【ASP.NET Web API2】利用HttpClient调用Web API(TODO)

    参照: 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用 纯属记录一下遇到的问题: 我们利用HttpClient来调用自宿主方式寄宿的Web API.HttpCl ...

  2. 【WebApi】通过HttpClient调用Web Api接口

    HttpClient是一个封装好的类,它在很多语言中都有被实现,现在HttpClient最新的版本是4.5. 它支持所有的http方法,自动转向,https协议,代理服务器. 一.Api接口参数标准化 ...

  3. 【ASP.NET Web API教程】3.2 通过.NET客户端调用Web API(C#)

    原文:[ASP.NET Web API教程]3.2 通过.NET客户端调用Web API(C#) 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的 ...

  4. 通过.NET客户端调用Web API(C#)

    3.2 Calling a Web API From a .NET Client (C#) 3.2 通过.NET客户端调用Web API(C#) 本文引自:http://www.asp.net/web ...

  5. WebApi系列~通过HttpClient来调用Web Api接口

    回到目录 HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api ...

  6. 通过HttpClient来调用Web Api接口

    回到目录 HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api ...

  7. Http下的各种操作类.WebApi系列~通过HttpClient来调用Web Api接口

    1.WebApi系列~通过HttpClient来调用Web Api接口 http://www.cnblogs.com/lori/p/4045413.html HttpClient使用详解(java版本 ...

  8. 【ASP.NET Web API教程】3.3 通过WPF应用程序调用Web API(C#)

    原文:[ASP.NET Web API教程]3.3 通过WPF应用程序调用Web API(C#) 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的 ...

  9. Dynamics 365 CE的插件/自定义工作流活动中调用Web API示例代码

    微软动态CRM专家罗勇 ,回复325或者20190428可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! 现在Web API越来越流行,有时候为了程序更加健壮,需要在插件 ...

随机推荐

  1. 修改maven本地仓库的默认地址

    由于maven默认仓库地址为C盘,所以缓存jar文件多了会占用掉C盘很多空间,鉴于此可更改maven仓库地址来避免.   1. 打开maven解压后目录,找到conf文件夹中的settion.xml文 ...

  2. web安全色

    web安全色产生的原因 不同的平台(Mac.PC等)有不同的调色板,不同的浏览器也有自己的调色板.这就意味着对于一幅图,显示在Mac上的Web浏览器中的图像,与它在PC上相同浏览器中显示的效果可能差别 ...

  3. javascript ES3小测试

    一.温故知新 做做题,总是能有温故知新的体验.这套题是2010年的了,比较老了, http://perfectionkills.com/  还有一套http://perfectionkills.com ...

  4. mybatis mapper.xml 写关联查询 运用 resultmap 结果集中 用 association 关联其他表 并且 用 association 的 select 查询值 报错 java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for mybatis.map

    用mybaits 写一个关联查询 查询商品表关联商品规格表,并查询规格表中的数量.价格等,为了sql重用性,利用 association 节点 查询 结果并赋值报错 商品表的mapper文件为Gooo ...

  5. JAVA中LOCK

    原文链接:http://www.cnblogs.com/dolphin0520/p/3923167.html 一.synchronized的缺陷 我们知道如果一个代码块被synchronized修饰了 ...

  6. 关于jQuery插件imgAreaSelect基础讲解

    关于ImgAreaSelect,  是一jQuery插件,它支持用户通过鼠标拖曳选择图片的一部分,如图片拖曳.图片编辑等~~来具体看一下 1.先下载imgAreaSelect插件 下载地址: 英文:h ...

  7. 基于OWIN+DotNetOpenOAuth实现OAuth2.0

    这几天时间一直在研究怎么实现自己的OAuth2服务器,对于太了解OAuth原理以及想自己从零开始实现的,我建议可以参考<Apress.Pro ASP.NET Web API Security&g ...

  8. 【2017-05-22】WebForm内置对象:Application和ViewState、Repeater的Command用法

    一.内置对象 1.Application 存贮在服务器端,占用服务器内存生命周期:永久 所有人访问的都是这一个对象 传值:传的是object类型可以传对象. string s =TextBox1.Te ...

  9. R笔记(1):formula和Formula

    #####开一个新的系列.关于R的一些笔记,就是遇到过的一些问题的简单整理.可能很基本,也可能没什么大的用处,作为一个记录而已.------------------------------------ ...

  10. 每天一道Java题[11]

    题目 synchronized怎么实现线程同步?请修改<每天一道Java题[10]>中的MyRunnableThread类以解决三个线程都获取到10的问题. 解答 方法一: 采用synch ...