WebApi系列~通过HttpClient来调用WebApi接口

合集下载

webapi运行原理

webapi运行原理

webapi运行原理WebAPI是一种基于RESTful架构风格的API,它使用HTTP协议进行数据传输。

WebAPI是一种通用的API,可以接收来自任何客户端的请求。

WebAPI可以由任何编程语言编写,包括Java、Python、Ruby 和C#等。

WebAPI的运行原理WebAPI工作的基本原理是,客户端发送请求,服务器接收请求并返回数据。

在请求和响应之间,服务器根据请求中包含的数据执行相应的操作。

WebAPI的请求通常是HTTP请求,这意味着客户端需要发送一个HTTP请求给服务器,服务器可以使用HTTP响应来返回数据。

WebAPI的架构WebAPI建立在RESTful架构风格上,它使用HTTP协议进行数据传输。

RESTful架构风格是一种面向资源的架构,它使用HTTP协议的GET、POST、PUT、DELETE等方法来操作资源。

WebAPI的架构包括以下组件:1.资源:WebAPI是基于RESTful架构风格的API,它的每个API 都对应着一个资源。

资源可以是一张图片、一篇文章、一段音频或任何其他类型的数据。

2.操作:WebAPI使用HTTP协议的GET、POST、PUT、DELETE等方法来操作资源。

3.表述:WebAPI使用表述来描述资源。

表述可以是JSON、XML、HTML或其他格式。

4.状态码:WebAPI使用HTTP状态码来表示响应的状态。

状态码包括200 OK、404 Not Found、500 Internal Server Error等。

WebAPI的安全性WebAPI的安全性非常重要,因为WebAPI可以被任何人使用,包括攻击者。

WebAPI的安全性包括以下方面:1.身份验证:WebAPI应该使用一种有效的身份验证机制来验证客户端的身份,例如基本认证、摘要认证或OAuth等。

2.授权:WebAPI应该使用授权机制来限制访问资源的权限。

例如,对于某些敏感的资源,只有特定的用户才能访问。

调用webapi接口实例

调用webapi接口实例

调用webapi接口实例调用WebAPI接口实例WebAPI是一种用于构建HTTP服务的框架,通过调用WebAPI接口可以实现与服务器进行数据交互的功能。

本文将以调用WebAPI接口实例为主题,介绍如何使用WebAPI进行数据传输和处理。

一、准备工作在开始调用WebAPI接口之前,首先需要准备一些基本的工作。

首先,确保已经安装了合适的开发工具,如Visual Studio等。

其次,需要了解所要调用的WebAPI接口的具体功能和参数要求,以便正确地进行调用。

二、发送请求在调用WebAPI接口之前,首先需要发送一个HTTP请求。

可以使用HttpClient类来发送请求,并设置请求的URL、请求方式和请求头等信息。

根据接口的要求,可能还需要设置请求体中的参数。

三、处理响应接下来,需要处理接口返回的响应。

一般而言,可以使用HttpResponseMessage类来获取响应的状态码、响应头和响应体等信息。

根据具体的业务需求,可以对响应进行解析和处理,例如提取所需的数据或进行错误处理。

四、异常处理在调用WebAPI接口时,可能会遇到各种异常情况,如网络错误、请求超时等。

为了确保程序的稳定性和可靠性,需要进行相应的异常处理。

可以使用try-catch语句来捕捉异常,并根据具体情况进行处理或提供错误提示。

五、安全性考虑在调用WebAPI接口时,需要注意保护数据的安全性。

可以通过使用HTTPS协议来加密传输的数据,防止数据被篡改或泄露。

此外,还可以使用身份验证和授权等机制来限制接口的访问权限,确保只有经过授权的用户才能进行调用。

六、性能优化为了提高接口调用的性能,可以采取一些优化措施。

例如,在请求中使用HTTP缓存机制,减少重复请求的次数;使用异步调用来提高并发处理能力;合理使用缓存来减少对服务器的访问等。

七、调试和测试在调用WebAPI接口之前,可以使用调试工具或测试工具对接口进行调试和测试。

可以模拟不同的请求参数和响应情况,以确保接口的正常工作和正确性。

webapi的几种请求方式

webapi的几种请求方式

webapi的几种请求方式(原创版)目录1.引言2.GET 请求3.POST 请求4.PUT 请求5.DELETE 请求6.总结正文一、引言Web API 是一种用于构建 Web 应用程序的接口,它允许开发人员在不同的系统之间共享数据和功能。

Web API 通过 HTTP 协议进行通信,支持多种请求方式。

本文将介绍 Web API 的几种常见请求方式,包括 GET、POST、PUT 和 DELETE。

二、GET 请求GET 请求是最常用的 Web API 请求方式之一。

它用于从服务器上获取数据,通常用于查询或检索资源。

GET 请求的 URL 中通常包含查询参数,用于向服务器传递所需数据的具体信息。

服务器在接收到 GET 请求后,会返回相应的数据,通常以 JSON 格式表示。

三、POST 请求POST 请求用于向服务器发送数据,通常用于创建新资源或提交表单。

POST 请求的数据通常通过请求体发送,而 URL 中不包含查询参数。

服务器在接收到 POST 请求后,会处理数据并返回相应的响应,通常也以 JSON格式表示。

四、PUT 请求PUT 请求用于更新服务器上的现有数据。

它与 POST 请求类似,但PUT 请求通常需要指定要更新的资源的 ID 或其他唯一标识符。

服务器在接收到 PUT 请求后,会根据请求中的数据更新相应的资源,并返回响应。

五、DELETE 请求DELETE 请求用于删除服务器上的资源。

它与 GET、POST 和 PUT 请求不同,因为 DELETE 请求不需要 URL 中包含查询参数。

服务器在接收到 DELETE 请求后,会删除指定的资源,并返回响应。

六、总结Web API 支持多种请求方式,包括 GET、POST、PUT 和 DELETE。

每种请求方式都有其特定的用途和特点,开发人员需要根据实际需求选择合适的请求方式。

.net6 webapi 接口原理

.net6 webapi 接口原理

文章标题:深度解析.net6 Web API 接口原理1. 介绍在今天的软件开发领域,Web API 接口的使用已经变得异常普遍。

.NET 6 是微软最新推出的版本,其对 Web API 接口的支持更加全面和强大。

我们有必要深入了解一下 .NET 6 Web API 接口的原理。

2. .NET 6 Web API 接口基本概念在深入了解 .NET 6 Web API 接口的原理之前,我们必须先了解一些基本概念。

这些概念包括 HTTP 协议、REST 架构、控制器、路由、模型绑定、中间件、过滤器、认证和授权等。

2.1 HTTP 协议HTTP 协议是 Web 通信的基础,它定义了客户端与服务器之间的通信规则。

在 .NET 6 中,Web API 接口是基于 HTTP 协议实现的。

2.2 REST 架构REST(Representational State Transfer)是一种设计风格,它强调客户端和服务器之间的状态转移。

在 .NET 6 中,Web API 接口通常遵循 RESTful 风格,以实现资源的增删改查操作。

2.3 控制器在 .NET 6 中,控制器是管理 Web API 请求和响应的核心组件。

通过控制器,我们可以定义路由、处理请求、进行模型绑定和返回响应。

2.4 路由路由是指定 URL 与控制器中的方法之间的映射关系。

在 .NET 6 中,我们可以使用路由来定义 Web API 接口的访问位置区域和参数。

2.5 模型绑定模型绑定是将 HTTP 请求的参数绑定到控制器的方法参数或自定义类型的过程。

在 .NET 6 中,模型绑定使得我们能够方便地处理请求参数并进行验证。

2.6 中间件中间件是 .NET 6 中用于处理 HTTP 请求和响应的组件。

通过中间件,我们可以实现请求的拦截、日志记录、异常处理等功能。

2.7 过滤器过滤器是在 .NET 6 中用于实现请求和响应过程中的预处理和后处理逻辑的组件。

java中webapi调用方式

java中webapi调用方式

在Java中,Web API调用是一项非常常见的任务。

Web API是一种由HTTP 协议提供服务的接口,它允许不同的应用程序之间进行通信。

在本文中,我将以从简到繁、由浅入深的方式来探讨Java中WebAPI调用的方式,并共享我对这个主题的个人观点和理解。

1. URLConnection类我们可以使用Java内置的URLConnection类来进行简单的Web API 调用。

这个类提供了一种简单而基本的方式来打开一个到指定URL资源的通信信息,并可以读取和写入该资源。

它适用于简单的GET和POST请求,但在处理复杂的响应和错误处理方面就显得力不从心了。

2. Apache HttpClientApache HttpClient是一个强大的Java HTTP客户端库,它为开发人员提供了更丰富的功能和更灵活的方式来进行Web API调用。

相比于URLConnection类,HttpClient具有更强大的功能,例如支持HTTPS、重定向、HTTP代理等。

它还提供了更友好的API,使得我们可以更轻松地处理响应和错误。

3. Spring RestTemplate作为Spring框架的一部分,RestTemplate是一种简化了的HTTP客户端工具,它提供了一种更优雅的方式来进行Web API调用。

通过RestTemplate,我们可以很容易地实现GET、POST、PUT、DELETE 等HTTP方法的调用,并且可以方便地处理响应和错误。

4. Reactive WebClient随着Spring 5引入了响应式编程范式,Reactive WebClient成为了一种新的选择。

它使用了Reactor库,提供了一种基于响应式流的方式来进行Web API调用。

这种方式在处理大量并发请求时具有很大的优势,并且可以方便地进行响应式编程。

总结回顾:在本文中,我从URLConnection类开始介绍了Java中Web API调用的方式,然后逐步深入介绍了Apache HttpClient、Spring RestTemplate和Reactive WebClient。

webapi使用方法

webapi使用方法

webapi使用方法Web API(Web Application Programming Interface)是一种用于不同应用程序之间进行通信的技术,它可以使不同的应用程序之间共享数据和功能。

通过使用Web API,开发人员可以轻松地将应用程序的功能扩展到其他平台和设备上。

本文将介绍Web API的使用方法,以帮助开发人员更好地理解和应用这项技术。

一、Web API的基本概念Web API是一组定义了应用程序之间通信规范的接口。

它允许开发人员使用HTTP协议在不同的应用程序之间传递数据。

Web API可以接收HTTP请求,并返回相应的数据或执行相应的操作。

开发人员可以使用不同的编程语言和框架来创建Web API,例如Java、C#、Python等。

二、Web API的使用场景Web API广泛应用于各种场景,例如:1.移动应用程序开发:开发人员可以使用Web API将移动应用程序与服务器进行通信,实现数据的传递和功能的扩展。

2.跨平台应用程序开发:Web API可以使不同平台的应用程序共享数据和功能,实现跨平台应用程序的开发和部署。

3.第三方应用程序集成:通过使用Web API,开发人员可以将自己的应用程序集成到其他应用程序中,实现数据共享和功能交互。

三、Web API的使用步骤使用Web API一般需要经过以下步骤:1.确定API的功能和数据:首先,开发人员需要确定API的功能和需要共享的数据。

这可以根据应用程序的需求和业务逻辑来确定。

2.设计API的接口:接下来,开发人员需要设计API的接口,包括请求方法(GET、POST、PUT、DELETE等)、请求参数和响应数据格式等。

3.实现API的功能:根据设计的接口,开发人员需要实现API的功能,包括数据的获取、处理和返回等。

在实现过程中,开发人员可以使用各种编程语言和框架来实现API的功能。

4.测试API的功能:完成API的实现后,开发人员需要进行测试,确保API的功能和数据的正确性。

C#--调用WebApi--(Get,Post,Put,Delete请求总结)

C#--调用WebApi--(Get,Post,Put,Delete请求总结)

C#--调⽤WebApi--(Get,Post,Put,Delete请求总结)以下是学习笔记:⼀,HttpWebRequest⽅式1,WebRequest⽅式 Get请求#region ⽅法3 .WebRequest⽅式 Get请求public static string HttpWebRequest_Get(string url){//ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);Encoding encoding = Encoding.UTF8;//构造⼀个Web请求的对象HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);request.Method = "GET";request.Accept = "text/html, application/xhtml+xml, */*";request.ContentType = "application/json";//获取web请求的响应的内容HttpWebResponse response = (HttpWebResponse)request.GetResponse();using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8)){return reader.ReadToEnd();}}private void button3_Click(object sender, EventArgs e){//string ss = HttpWebRequest_Get("http://localhost:55837/api/product");string ss = HttpWebRequest_Get(txt_get_url.Text);this.textBox3.Text += ss;}#endregion2,WebRequest⽅式 Get带参数请求#region WebRequest⽅式 Get带参数请求private void button6_Click(object sender, EventArgs e){string id = this.txt_get_parameter.Text;string ss = HttpWebRequest_Get(txt_get_url.Text+ "?"+id.Trim());//带参数this.textBox6.Text += ss;}#endregion3,WebRequest⽅式 Post请求#region ⽅法3 WebRequest⽅式 Post请求public static string HttpWebRequest_Post(string url, string body){//ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); Encoding encoding = Encoding.UTF8;HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);request.Method = "POST"; //Post请求⽅式request.Accept = "text/html, application/xhtml+xml, */*";// 内容类型//request.ContentType = "application/json";//参数格式: {username:"admin",password:"123} 如果参数不是json类型会报错request.ContentType ="application/x-www-form-urlencoded"; //参数:username=admin&password=123 如果参数是json格式或者参数写错不会报错的 byte[] buffer = encoding.GetBytes(body);request.ContentLength = buffer.Length;request.GetRequestStream().Write(buffer, 0, buffer.Length);//HttpWebResponse response = (HttpWebResponse)request.GetResponse();//上⾯的代码会有异常出现,更改如下:HttpWebResponse response;try{response = (HttpWebResponse)request.GetResponse();}catch (WebException ex){response = (HttpWebResponse)ex.Response;}using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8)){return reader.ReadToEnd();}}private void button4_Click(object sender, EventArgs e){string url = this.txt_post_url.Text;string body = this.txt_post_parameter.Text;string ss = HttpWebRequest_Post(url, body);this.textBox4.Text += ss;}#endregion4,HttpWebRequest⽅式 Delete请求:#region WebRequest⽅式 Delete请求/// <summary>/// API发送DELETE请求,返回状态:200成功,201失败/// </summary>/// <param name="url"></param>/// <returns></returns>public static string HttpWebRequest_Delete(string url){//Web访问对象64//string serviceUrl = string.Format("{0}/{1}", this.BaseUri, uri);string serviceUrl = url;HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(serviceUrl);myRequest.Method = "DELETE";// 获得接⼝返回值68HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8); //string ReturnXml = HttpUtility.UrlDecode(reader.ReadToEnd());string ReturnXml = reader.ReadToEnd();reader.Close();myResponse.Close();return ReturnXml;}private void button7_Click(object sender, EventArgs e){if (txt_delete_parameter.Text.Trim().Length > 0){HttpWebRequest_Delete(txt_delete_rul.Text+"?"+txt_delete_parameter.Text);//带参数删除}else{HttpWebRequest_Delete(txt_delete_rul.Text);//全部删除}}5,HttpWebRequest⽅式 Put请求:见下⾯的通⽤⽅法⼆,HttpClient ⽅式1,HttpClient ⽅式 Get请求#region ⽅法4 HttpClient ⽅式 Get请求public static string HttpClienGet(string url){HttpClient hc = new HttpClient();string html= hc.GetStringAsync(url).Result;return html;}private void btn_HttpClentGet_Click(object sender, EventArgs e){string url = this.txt_get_url.Text;string html = HttpClienGet(url);txt_HttpClentGet_Result.Text += html;}#endregion2,HttpClient ⽅式 Post请求#region ⽅法4 HttpClient ⽅式 Post请求public static async void HttpClientPost(string url){var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.None }; using (var httpclient = new HttpClient(handler)){httpclient.BaseAddress = new Uri(url);var content = new FormUrlEncodedContent(new Dictionary<string, string>(){{"name", "杜宗英"},{"age", "18"},{"gender","false" }});var response = await httpclient.PostAsync(url, content);string responseString = await response.Content.ReadAsStringAsync();MessageBox.Show(responseString);}}private void button5_Click(object sender, EventArgs e){string url = this.txt_post_url.Text;HttpClientPost(url);}#endregion三,WebClient ⽅式1,WebClient⽅式 Post请求#region WebClient⽅式 Post请求/// <summary>////// </summary>/// <param name="url"></param>/// <param name="body">传递的参数</param>/// <returns></returns>public static string WebClientPost(string url,string body){byte[] postData = Encoding.UTF8.GetBytes(body);//编码,尤其是汉字,事先要看下抓取⽹页的编码⽅式WebClient webClient=new WebClient();webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");//采取POST⽅式必须加的header,如果改为GET⽅式的话就去掉这句话即可 byte[] responseData = webClient.UploadData(url, "POST", postData);//得到返回字符流string srcString = Encoding.UTF8.GetString(responseData);//解码return srcString;}private void btn_WebClient_Post_Click(object sender, EventArgs e){string url = this.txt_post_url.Text;string body = this.txt_post_parameter.Text;string srcString = WebClientPost(url, body);this.txt_WebClient_Post.Text += srcString;}#endregion四,HttpWebRequest通⽤⽅法public string CommonHttpWebRequest(string data, string uri, string type){//Web访问对象,构造请求的url地址//string serviceUrl = string.Format("{0}/{1}", this.BaseUri, uri);string serviceUrl = uri;//构造http请求的对象HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceUrl);//转成⽹络流byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);//设置request.Method = type;request.ContentLength = buf.Length;//myRequest.ContentType = "application/json";//如果参数不是json格式会报错request.ContentType ="application/x-www-form-urlencoded";request.MaximumAutomaticRedirections = 1;request.AllowAutoRedirect = true;// 发送请求Stream newStream = request.GetRequestStream();newStream.Write(buf, 0, buf.Length);newStream.Close();// 获得接⼝返回值//HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();//上⾯的代码会有异常出现,更改如下:HttpWebResponse response;try{response = (HttpWebResponse)request.GetResponse();}catch (WebException ex){response = (HttpWebResponse)ex.Response;}StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);string ReturnXml = reader.ReadToEnd();reader.Close();response.Close();return ReturnXml;} 1,Delete请求代码:private void btn_webapi_delete_Click(object sender, EventArgs e){string url = txt_delete_rul.Text;string data = txt_delete_parameter.Text;if (data.Trim().Length > 0){CommonHttpWebRequest(data, url + "?" + data, "DELETE");//带参数删除}else{CommonHttpWebRequest(data, url, "DELETE"); ;//全部删除}} 2,Post请求代码:private void btn_webapi_post_Click(object sender, EventArgs e){string url = txt_post_url.Text;string data = txt_post_parameter.Text;string res = CommonHttpWebRequest(data, url, "POST");this.txt_webapi_get_data.Text += res;} 3,Put 请求代码:private void btn_webapi_put_Click(object sender, EventArgs e){string url = txt_put_url.Text;string data = txt_put_parameter.Text;string res = CommonHttpWebRequest(data, url, "PUT");this.txt_webapi_get_data.Text += res;}。

webapi 讲解

webapi 讲解

webapi 讲解Web API(Application Programming Interface)是一种用于不同应用程序之间进行通信的技术。

它允许开发人员通过定义的接口,以统一的方式访问和操作远程服务器上的资源。

本文将围绕Web API展开讨论,从其基本概念、工作原理、应用场景和未来发展等方面进行介绍。

一、Web API的基本概念Web API是一种软件接口,它使用HTTP协议作为通信协议,通过URL(Uniform Resource Locator)来定位和访问资源。

它可以提供各种服务,如数据查询、数据修改、文件上传和下载等。

Web API 基于REST(Representational State Transfer)架构风格,以资源为中心,使用HTTP方法(GET、POST、PUT、DELETE)来进行操作。

二、Web API的工作原理Web API的工作原理可以简单描述为以下几个步骤:1. 客户端通过HTTP请求访问Web API,包括指定资源的URL和请求方法。

2. 服务器接收到请求后,根据URL和请求方法,调用相应的API方法。

3. API方法对请求进行处理,可能涉及数据查询、数据更新等操作。

4. 处理完请求后,服务器将结果封装成HTTP响应返回给客户端。

三、Web API的应用场景Web API在互联网应用开发中有广泛的应用场景,例如:1. 移动应用开发:移动应用可以通过Web API访问远程服务器上的数据,实现数据的同步和共享。

2. 第三方集成:Web API可以提供给第三方开发者使用,使其能够与自己的应用进行集成,实现更多功能和服务。

3. 数据开放:Web API可以将内部数据开放给外部开发者使用,促进数据共享和创新。

4. 服务器通信:不同服务之间可以通过Web API进行通信,实现数据的交互和共享。

四、Web API的未来发展随着互联网的快速发展和应用需求的不断增加,Web API的重要性日益凸显。

webapi的几种请求方式

webapi的几种请求方式

webapi的几种请求方式Web API是一种应用程序编程接口(API),通过HTTP协议进行交互,并通过Web服务提供外部应用程序访问和集成服务器端资源的机制。

Web API允许开发人员通过发送HTTP请求和接收HTTP响应与服务器进行通信。

在Web开发中,常用的几种Web API请求方式有GET、POST、PUT、PATCH和DELETE。

1. GET请求:GET请求是最常用的Web API请求方法之一。

它用于从服务器获取资源或数据。

通过GET请求,客户端发送一个HTTP GET请求给服务器,并从服务器获取资源的表示形式(通常是JSON或XML格式的数据)。

GET请求通常是无状态的,不会对服务器上的资源进行修改。

例如,当我们在浏览器中输入URL并按下回车时,浏览器会发送一个GET请求来获取相应的网页。

2. POST请求:POST请求是另一种常用的Web API请求方法。

它用于将数据发送到服务器以创建新资源。

通过POST请求,客户端将一些数据作为请求的一部分发送给服务器,然后服务器根据请求的数据创建一个新的资源。

常见的应用场景包括用户注册、提交表单、上传文件等。

POST请求通常会修改服务器上的资源状态,并返回一个表示新资源的URI。

3. PUT请求:PUT请求用于向服务器上传更新一个已经存在的资源。

PUT请求是一种幂等操作,即多次执行相同的PUT请求,结果都应该相同。

通过PUT请求,客户端发送一个包含更新后的资源表示的HTTP请求到服务器,然后服务器根据请求中的数据更新对应的资源。

PUT请求可以用于创建新资源,但通常用于完全替换服务器上已经存在的资源。

4. PATCH请求:PATCH请求类似于PUT请求,但是它是用来部分更新服务器上已经存在的资源,而不是完全替换。

通过PATCH请求,客户端发送一个包含更新后的资源部分表示的HTTP请求到服务器,然后服务器根据请求中的数据部分更新对应的资源。

PATCH请求是一种幂等操作,多次执行相同的PATCH请求,结果应该相同。

使用HttpClient调用WebAPI接口,含WebAPI端示例

使用HttpClient调用WebAPI接口,含WebAPI端示例

使⽤HttpClient调⽤WebAPI接⼝,含WebAPI端⽰例API端:using log4net;using System;using System.Collections.Generic;using System.IO;using System.Linq;using ;using .Http;using System.Reflection;using System.Threading.Tasks;using System.Web;using System.Web.Http;namespace WebApi.Controllers{public class DefaultController : ApiController{private ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);IList<menu> List = new List<menu>();public DefaultController(){for (int i = 1; i <= 2; i++){List.Add(new menu { menuId = i, menuName = "Menu" + i });}}// GET: api/Defaultpublic IEnumerable<menu> Get(){return List;}// GET: api/Default/5public menu Get(int id){try{return List.FirstOrDefault(m => m.menuId == id);}catch(Exception e){return new menu();}}// POST: api/Default//public void Post(int id,[FromBody]menu menu)//{// (menu.menuName);//}// PUT: api/Default/5public void Put(int id, string guid, [FromBody]string value){Format("PUT id:{0},value:{1},guid:{2}", id, value, guid);}// DELETE: api/Default/5public void Delete(int id){(id);}public IHttpActionResult UploadFile(){//(id);(HttpContext.Current.Request.Form["qq"]);var file = HttpContext.Current.Request.Files[0];file.SaveAs(HttpContext.Current.Server.MapPath("/test.jpg"));return Ok<string>("test");}}public class menu{public int menuId { get; set; }public string menuName { get; set; }}}调⽤端:using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using .Http;using System.Text;using .Http.Headers;using System.IO;using Newtonsoft.Json;namespace WebApi.Controllers{public class ClientController : Controller{// GET: Clientpublic ActionResult Index(){//HttpClient client = new HttpClient();//string Url = "http://localhost:33495/api/default/";#region原始⽅式调⽤//StringContent⽅式调⽤//var result = client.PostAsync(Url, new StringContent("111", Encoding.UTF8, "application/json")).Result;//ByteArrayContent⽅式//var data = Encoding.UTF8.GetBytes("\"ddd\"");//data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new menu { menuId = 1, menuName = "33333" })); //data = Encoding.UTF8.GetBytes("{menuId:1,menuName:333}");//var content = new ByteArrayContent(data);//content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");//var result_byte = client.PostAsync(Url, content).Result;//PostAsJsonAsync⽅式//client.PostAsJsonAsync(Url, "ss");#endregion#region多参数传参//client.PutAsJsonAsync(string.Format("{0}{1}?guid={2}", Url, 5, Guid.NewGuid()), "test");#endregion#region服务端上传图⽚//服务端上传图⽚//using (HttpClient client = new HttpClient())//{// var content = new MultipartFormDataContent();////添加字符串参数,参数名为qq// content.Add(new StringContent("123456"), "qq");// string path = Server.MapPath("/Images/test.jpg");////添加⽂件参数,参数名为files,⽂件名为123.png// content.Add(new ByteArrayContent(System.IO.File.ReadAllBytes(path)), "file", "test.jpg");// var requestUri = "http://localhost:33495/api/default/";// var result = client.PostAsync(requestUri, content).Result.Content.ReadAsStringAsync().Result;// Response.Write(result);//}#endregionreturn null;}public ActionResult HTML(){return View();}public ActionResult Upload(){return View();}}}HTML(AJAX上传)<!DOCTYPE html><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>webapi上传图⽚</title><script src="~/Scripts/jquery-1.10.2.js"></script></head><body><h2>webapi create</h2><div><form name="form1" method="post" enctype="multipart/form-data"> <div><label for="image1">Image</label><input type="text" name="test" id="test" /></div><div><label for="image1">Image</label><input type="file" name="photo" id="photo" /></div><div><input type="button" value="ajax upload" id="btnUpload" /></div><div><img id="phptoPic" width="200" /></div></form></div><script type="text/javascript">$(function () {$("#btnUpload").click(function () {var formData = new FormData();formData.append("photo", $("#photo")[0].files[0]);$.ajax({url: '/api/default/UploadFile',type: 'post',data: formData,contentType: false,processData: false,success: function (res) {//console.log(res);if (res == "test") {$("#phptoPic").attr("src", res.url)} else {alert(res.message)}}})})})</script></body></html>微软官⽹⽰例:<!DOCTYPE html><html xmlns="/1999/xhtml"><head><title>Product App</title></head><body><div><h2>All Products</h2><ul id="products" /></div><div><h2>Search by ID</h2><input type="text" id="prodId" size="5" /><input type="button" value="Search" onclick="find();" /><p id="product" /></div><script src="~/Scripts/jquery-1.10.2.js"></script><script>var uri = '/api/Default';$(document).ready(function () {// Send an AJAX request$.getJSON(uri).done(function (data) {// On success, 'data' contains a list of products.$.each(data, function (key, item) {// Add a list item for the product.$('<li>', { text: formatItem(item) }).appendTo($('#products')); });});});function formatItem(item) {return item.menuId + item.menuName;}function find() {var id = $('#prodId').val();$.getJSON(uri + '/' + id).done(function (data) {$('#product').text(formatItem(data));}).fail(function (jqXHR, textStatus, err) {$('#product').text('Error: ' + err);});}</script></body></html>。

web api 接口调用流程

web api 接口调用流程

web api 接口调用流程Web API(应用程序编程接口)的调用流程通常包括以下几个步骤:1. 鉴权认证,在调用Web API之前,通常需要进行身份验证和授权。

这可以通过使用 API 密钥、OAuth 令牌或其他身份验证机制来实现。

用户需要提供有效的凭证来证明其身份和权限,以便访问API。

2. 构建请求,一旦认证通过,就可以构建 API 请求。

通常,这涉及到构造一个 HTTP 请求,包括指定所需的 HTTP 方法(GET、POST、PUT、DELETE等)、API端点(URL)、请求头部(包括身份验证信息和其他必要的信息)以及可能的请求体(对于POST和PUT 请求)。

3. 发送请求,构建好请求后,将其发送到API端点。

这可以通过使用 HTTP 客户端库或工具来实现,例如cURL、Postman等。

请求将通过网络发送到API服务器。

4. 服务器处理,一旦API服务器接收到请求,它将根据请求的内容和参数进行处理。

这可能涉及到验证请求、处理数据、执行相应的操作,并生成相应的响应。

5. 接收响应,API服务器处理完请求后,将生成一个响应。

这个响应通常是一个包含数据的HTTP响应,包括状态码、响应头和响应体。

客户端将接收到这个响应,并根据其中的数据进行处理。

6. 处理响应,客户端收到API的响应后,可以根据需要对响应进行处理。

这可能涉及到解析响应体中的数据,处理返回的状态码以及处理响应头部信息。

7. 错误处理,在整个调用流程中,可能会出现各种错误,包括网络错误、服务器错误、认证失败等。

在调用API时,需要考虑如何处理这些错误,例如重试请求、回退到备用API、记录错误日志等。

总的来说,Web API的调用流程涉及到鉴权认证、构建请求、发送请求、服务器处理、接收响应、处理响应以及错误处理等多个步骤。

这些步骤需要按照规范和最佳实践进行处理,以确保API调用的安全、可靠和高效。

WebApi(6)后台C#调用WebApi

WebApi(6)后台C#调用WebApi

WebApi(6)后台C#调⽤WebApi今天来写⼀下后台C#代码如何访问webapi 这⾥使⽤HttpClient⽅法访问webapi也是很常⽤的⽅法。

因为我在是webapi项⽬⾥直接写的,为了⽅便就直接读取了当前地址,代码包括 webapi的所有⽤法【Getstring GetClass GetListClass Post put Delete】。

代码如下:12345 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57//后台client⽅式GET提交HttpClient myHttpClient = new HttpClient();//提交当前地址的webapistring url = "http://"+ System.Web.HttpContext.Current.Request.Url.Host + ":"+ System.Web.HttpContext.Current.Request.Url.Port.ToString(); myHttpClient.BaseAddress = new Uri(url);//GET提交返回stringHttpResponseMessage response = myHttpClient.GetAsync("api/ApiDemo/Get2").Result;string result = "";if(response.IsSuccessStatusCode){result = response.Content.ReadAsStringAsync().Result;}//return Content(JsonConvert.SerializeObject(result));Product product = null;//GET提交返回classresponse = myHttpClient.GetAsync("api/ProductsAPI/GetProduct/1").Result;if(response.IsSuccessStatusCode){product = response.Content.ReadAsAsync<Product>().Result;}//return Content (JsonConvert.SerializeObject(product));//put 提交先创建⼀个和webapi对应的类var content = new FormUrlEncodedContent(new Dictionary<string, string>(){{"Id","2"},{"Name","Name:"+DateTime.Now.ToString() },{"Category","111"},{"Price","1"}});response = myHttpClient.PutAsync("api/ProductsAPI/PutProduct/2", content).Result;if(response.IsSuccessStatusCode){result = response.Content.ReadAsStringAsync().Result;}//post 提交先创建⼀个和webapi对应的类content = new FormUrlEncodedContent(new Dictionary<string, string>(){{"Id","382accff-57b2-4d6e-ae84-a61e00a3e3b5"},{"Name","Name"},{"Category","111"},{"Price","1"}});response = myHttpClient.PostAsync("api/ProductsAPI/PostProduct", content).Result;if(response.IsSuccessStatusCode){result = response.Content.ReadAsStringAsync().Result;}//delete 提交response = myHttpClient.DeleteAsync("api/ProductsAPI/DeleteProduct/1").Result;if(response.IsSuccessStatusCode){result = response.Content.ReadAsStringAsync().Result;}//GET提交返回List<class>response = myHttpClient.GetAsync("api/ProductsAPI/GetAllProducts").Result;List<Product> listproduct = new List<Models.Product>();57 58 59 60 61 62 63 64 65 66List<Product> listproduct = new List<Models.Product>();if(response.IsSuccessStatusCode){listproduct = response.Content.ReadAsAsync<List<Product>>().Result; }return Content(JsonConvert.SerializeObject(listproduct));/// <summary>/// url请求/// </summary>/// <param name="type"></param>/// <param name="paramData"></param>/// <returns></returns>private static string WebRequest(string method, string type, string paramData){string apiUrl = "http://" + ConfigHelper.GetBaseUrl("url") + "/Session";apiUrl = apiUrl.EndsWith("/") ? apiUrl : apiUrl + "/";string postUrl = string.Empty;if (type == "Get" || type == "Delete"){postUrl = apiUrl + method + "?" + paramData;}else{postUrl = apiUrl + method;}LogWriter.ToDebug(postUrl);string ret = string.Empty;byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(paramData);.HttpWebRequest webReq = (.HttpWebRequest).WebRequest.Create(new Uri(postUrl));webReq.Method = type;switch (type){case "Post":{webReq.ContentLength = byteArray.Length;webReq.ContentType = "application/json";System.IO.Stream newStream = webReq.GetRequestStream();newStream.Write(byteArray, 0, byteArray.Length); //写⼊参数newStream.Close();}break;case "Put":{webReq.ContentLength = byteArray.Length;webReq.ContentType = "application/x-www-form-urlencoded";System.IO.Stream newStream = webReq.GetRequestStream();newStream.Write(byteArray, 0, byteArray.Length); //写⼊参数newStream.Close();}break;}using (.HttpWebResponse response = (.HttpWebResponse)webReq.GetResponse()){System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8); ret = sr.ReadToEnd();sr.Close();}return ret;}c#调⽤webapi post list折腾了半天,最后⽤这种⽅式解决了。

winform 调用webapi的案例

winform 调用webapi的案例

以下是一个使用WinForms调用Web API的简单案例:1.首先,创建一个简单的Web API。

你可以使用Visual Studio中的Web API模板来创建一个新的Web API项目。

在项目中,可以定义一个简单的API端点,例如:2.csharp复制代码[Route("api/[controller]")]public class ValuesController : Controller{[HttpGet]public string Get(){return"Hello from Web API!";}}1.在WinForms应用程序中,使用HttpClient类来调用Web API。

可以创建一个HttpClient实例,并使用它来发送HTTP请求到Web API端点,并获取响应数据。

以下是一个简单的示例代码:2.csharp复制代码using System;using .Http;using System.Threading.Tasks;using WinFormsMvvm.DialogService;namespace WinFormsApp{public class WebApiService{private readonly HttpClient _httpClient;public WebApiService(){_httpClient = new HttpClient();}public async Task<string> GetDataFromApi(){try{var response = await _httpClient.GetStringAsync("http://localhost:5000/api/values");return response;}catch (HttpRequestException e){Console.WriteLine($"Error occurred: {e.Message}");return null;}}}}在上面的代码中,我们创建了一个名为WebApiService的类,它包含一个名为GetDataFromApi的方法,该方法使用HttpClient发送GET请求到Web API端点,并返回响应数据。

WebApi接口-如何在应用中调用webapi接口

WebApi接口-如何在应用中调用webapi接口

WebApi接⼝-如何在应⽤中调⽤webapi接⼝很⾼兴能再次和⼤家分享webapi接⼝的相关⽂章,本篇将要讲解的是如何在应⽤中调⽤webapi接⼝;对于⼤部分做内部管理系统及类似系统的朋友来说很少会去调⽤别⼈的接⼝,因此可能在这⽅⾯存在⼀些困惑,希望本篇分享⽂章内容能给您们带来帮助或者学习,希望⼤家喜欢,也希望各位多多扫码⽀持和点赞谢谢:» 简单做个webapi(查询+添加)接⼝» MVC代码中如何调⽤api接⼝» ajax如何调api接⼝下⾯⼀步⼀个脚印的来分享:» 简单做个webapi(查询+添加)接⼝⾸先,我们需要有⼀个webapi接⼝项⽬,我这⾥以前⾯⽂章的项⽬来构建本篇⽂章的测试⽤例;这⾥新建⼀个 DbData 数据源类,主要⽤来做数据存储和提供查询列表数据及添加数据⽅法,具体代码如:1public class DbData2 {3public static DbData Current4 {5get6 {7var key = "dbKey";8var db = CallContext.GetData(key) as DbData;9if (db == null)10 {11 db = new DbData();12 CallContext.SetData(key, db);13 }14return db;15 }16 }171819private static List<MoStudent> students = new List<MoStudent>(){20new MoStudent{ Id =1 , Name ="⼩1", Sex = true, Birthday= Convert.ToDateTime("1991-05-31")},21new MoStudent{ Id =2 , Name ="⼩2", Sex = false, Birthday= Convert.ToDateTime("1991-05-31")},22new MoStudent{ Id =3 , Name ="⼩3", Sex = false, Birthday= Convert.ToDateTime("1991-05-31")},23new MoStudent{ Id =4 , Name ="⼩4", Sex = true, Birthday= Convert.ToDateTime("1991-05-31")}24 };2526public List<MoStudent> GetAll()27 {28return students;29 }3031public bool Save(MoStudent moStudent)32 {33 moStudent.Id = students.Max(b => b.Id) + 1;34 students.Add(moStudent);35return true;36 }37 }然后,需要在 ValuesController.cs ⽂件中增加调⽤数据源类 DbData ,代码:private DbData db = DbData.Current; 这⾥使⽤了 DbData 类中的Current属性来获取DbData的实例化对象,这⾥和⼤家简单说下这样做的好处在于统⼀管理调⽤类的实例,因为我们创建的某个操作类后,可能会在不同的⽂件或不同业务中调⽤,如果想调⽤其内部⽅法,那么需要⽤到new⼀个对象,如此⼀来多次在使⽤的地⽅都new⼀次感觉很繁琐,⽽且不容已维护;当然这⾥的DbData是简单的测试⽤例,没有⽤到什么⼯⼚,抽象等设计来处理声明这类的实例(⼤家可以忽略哦);好了,我们再 ValuesController 中分别创建个获取学⽣列表信息的⽅法 GetAllStudents01_2 和添加学⽣信息的⽅法 AddStudent ,然后填写内部代码如:1private DbData db = DbData.Current;23 [Route("all01_2")]4 [AcceptVerbs("POST","GET")]5public HttpResponseMessage GetAllStudents01_2()6 {7var students = db.GetAll();8return Request.CreateResponse(HttpStatusCode.OK, students);9 }1011 [Route("add")]12 [HttpPost]13public HttpResponseMessage AddStudent(MoStudent moStudent)14 {15var httpStatus = HttpStatusCode.OK;16if (ModelState.IsValid)17 {18var isfalse = db.Save(moStudent);19 }20return Request.CreateResponse(httpStatus, moStudent);21 }两个⽅法的参数或者返回信息没有做更多的处理,能够⼤家看就⾏,好了创建完api接⼝代码后,我们来测试访问下学⽣列表接⼝,地址如: http://localhost:1001/s/all01_2,得到的结果图:返回的是json格式数据,本篇围绕的数据格式都是json,这也是很常⽤的返回数据格式之⼀;» MVC代码中如何调⽤api接⼝⾸先,创建⼀个mvc项⽬,创建⽅式可以看这篇⽂章,然后再 HomeController.cs ⽂件中增加Index(学⽣列表)和Add(添加学⽣信息)两个Action⽅法,并且填写代码如:1public class HomeController : Controller2 {34public async Task<ActionResult> Index()5 {67var searchData = new MoStudent();8//查询条件910var webapiUrl = "http://localhost:1001/s/all01_2";11var httpResponseMsg = new HttpResponseMessage();1213using (var httpClient = new HttpClient())14 {15 httpResponseMsg = await httpClient.PostAsync(webapiUrl, searchData, new .Http.Formatting.JsonMediaTypeFormatter());16 }17var students = httpResponseMsg.Content.ReadAsAsync<List<MoStudent>>().Result;1819return View(students);20 }2122 [HttpGet]23public ActionResult Add()24 {2526return View();27 }2829 [HttpPost]30public async Task<ActionResult> Add(MoStudent model)31 {32if (ModelState.IsValid)33 {34var webapiUrl = "http://localhost:1001/s/add";35var httpResponseMsg = new HttpResponseMessage();3637using (var httpClient = new HttpClient())38 {39 httpResponseMsg = await httpClient.PostAsync<MoStudent>(webapiUrl, model, new .Http.Formatting.JsonMediaTypeFormatter());40 }41 model = httpResponseMsg.Content.ReadAsAsync<MoStudent>().Result;42 }4344 ModelState.AddModelError("", model.Id > 0 ? "添加成功" : "添加失败");45return View(model);46 }47 }这⾥需要讲解⼏个注意的地⽅, HttpClient 类主要⽤来做接⼝请求的,这⾥我通过传递参数给她的扩展 PostAsync ⽅法来请求我们刚才创建的webapi地址 http://localhost:1001/s/all01_2,这⾥先来简单看下这个⽅法使⽤到的参数说明:1//2// 摘要:3// 使⽤通过给定格式化程序序列化的指定值,以异步操作⽅式发送 POST 请求。

使用HttpClient调用接口的实例讲解

使用HttpClient调用接口的实例讲解

使⽤HttpClient调⽤接⼝的实例讲解⼀,编写返回对象public class HttpResult {// 响应的状态码private int code;// 响应的响应体private String body;get/set…}⼆,封装HttpClientpackage cn.xxxxxx.httpclient;import java.util.ArrayList;import java.util.List;import java.util.Map;import ValuePair;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpDelete;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.client.methods.HttpPut;import org.apache.http.client.utils.URIBuilder;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils;public class APIService {private CloseableHttpClient httpClient;public APIService() {// 1 创建HttpClinet,相当于打开浏览器this.httpClient = HttpClients.createDefault();}/*** 带参数的get请求** @param url* @param map* @return* @throws Exception*/public HttpResult doGet(String url, Map<String, Object> map) throws Exception {// 声明URIBuilderURIBuilder uriBuilder = new URIBuilder(url);// 判断参数map是否为⾮空if (map != null) {// 遍历参数for (Map.Entry<String, Object> entry : map.entrySet()) {// 设置参数uriBuilder.setParameter(entry.getKey(), entry.getValue().toString());}}// 2 创建httpGet对象,相当于设置url请求地址HttpGet httpGet = new HttpGet(uriBuilder.build());// 3 使⽤HttpClient执⾏httpGet,相当于按回车,发起请求CloseableHttpResponse response = this.httpClient.execute(httpGet);// 4 解析结果,封装返回对象httpResult,相当于显⽰相应的结果// 状态码// response.getStatusLine().getStatusCode();// 响应体,字符串,如果response.getEntity()为空,下⾯这个代码会报错,所以解析之前要做⾮空的判断 // EntityUtils.toString(response.getEntity(), "UTF-8");HttpResult httpResult = null;// 解析数据封装HttpResultif (response.getEntity() != null) {httpResult = new HttpResult(response.getStatusLine().getStatusCode(),EntityUtils.toString(response.getEntity(), "UTF-8"));} else {httpResult = new HttpResult(response.getStatusLine().getStatusCode(), "");}// 返回return httpResult;}/*** 不带参数的get请求** @param url* @return* @throws Exception*/public HttpResult doGet(String url) throws Exception {HttpResult httpResult = this.doGet(url, null);return httpResult;}/*** 带参数的post请求** @param url* @param map* @return* @throws Exception*/public HttpResult doPost(String url, Map<String, Object> map) throws Exception {// 声明httpPost请求HttpPost httpPost = new HttpPost(url);// 判断map不为空if (map != null) {// 声明存放参数的List集合List<NameValuePair> params = new ArrayList<NameValuePair>();// 遍历map,设置参数到list中for (Map.Entry<String, Object> entry : map.entrySet()) {params.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString()));}// 创建form表单对象UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(params, "UTF-8");// 把表单对象设置到httpPost中httpPost.setEntity(formEntity);}// 使⽤HttpClient发起请求,返回responseCloseableHttpResponse response = this.httpClient.execute(httpPost);// 解析response封装返回对象httpResultHttpResult httpResult = null;if (response.getEntity() != null) {httpResult = new HttpResult(response.getStatusLine().getStatusCode(),EntityUtils.toString(response.getEntity(), "UTF-8"));} else {httpResult = new HttpResult(response.getStatusLine().getStatusCode(), "");}// 返回结果return httpResult;}/*** 不带参数的post请求** @param url* @return* @throws Exception*/public HttpResult doPost(String url) throws Exception {HttpResult httpResult = this.doPost(url, null);return httpResult;}/*** 带参数的Put请求** @param url* @param map* @return* @throws Exception*/public HttpResult doPut(String url, Map<String, Object> map) throws Exception {// 声明httpPost请求HttpPut httpPut = new HttpPut(url);// 判断map不为空if (map != null) {// 声明存放参数的List集合List<NameValuePair> params = new ArrayList<NameValuePair>();// 遍历map,设置参数到list中for (Map.Entry<String, Object> entry : map.entrySet()) {params.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString())); }// 创建form表单对象UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(params, "UTF-8"); // 把表单对象设置到httpPost中httpPut.setEntity(formEntity);}// 使⽤HttpClient发起请求,返回responseCloseableHttpResponse response = this.httpClient.execute(httpPut);// 解析response封装返回对象httpResultHttpResult httpResult = null;if (response.getEntity() != null) {httpResult = new HttpResult(response.getStatusLine().getStatusCode(),EntityUtils.toString(response.getEntity(), "UTF-8"));} else {httpResult = new HttpResult(response.getStatusLine().getStatusCode(), "");}// 返回结果return httpResult;}/*** 带参数的Delete请求** @param url* @param map* @return* @throws Exception*/public HttpResult doDelete(String url, Map<String, Object> map) throws Exception { // 声明URIBuilderURIBuilder uriBuilder = new URIBuilder(url);// 判断参数map是否为⾮空if (map != null) {// 遍历参数for (Map.Entry<String, Object> entry : map.entrySet()) {// 设置参数uriBuilder.setParameter(entry.getKey(), entry.getValue().toString());}}// 2 创建httpGet对象,相当于设置url请求地址HttpDelete httpDelete = new HttpDelete(uriBuilder.build());// 3 使⽤HttpClient执⾏httpGet,相当于按回车,发起请求CloseableHttpResponse response = this.httpClient.execute(httpDelete);// 4 解析结果,封装返回对象httpResult,相当于显⽰相应的结果// 状态码// response.getStatusLine().getStatusCode();// 响应体,字符串,如果response.getEntity()为空,下⾯这个代码会报错,所以解析之前要做⾮空的判断 // EntityUtils.toString(response.getEntity(), "UTF-8");HttpResult httpResult = null;// 解析数据封装HttpResultif (response.getEntity() != null) {httpResult = new HttpResult(response.getStatusLine().getStatusCode(),EntityUtils.toString(response.getEntity(), "UTF-8"));} else {httpResult = new HttpResult(response.getStatusLine().getStatusCode(), "");}// 返回return httpResult;}}三,调⽤接⼝package cn.xxxxxx.httpclient.test;import java.util.HashMap;import java.util.Map;import org.junit.Before;import org.junit.Test;import cn.itcast.httpclient.APIService;import cn.itcast.httpclient.HttpResult;public class APIServiceTest {private APIService apiService;@Beforepublic void init() {this.apiService = new APIService();}// 查询@Testpublic void testQueryItemById() throws Exception {// /rest/item/interface/{id}String url = "/rest/item/interface/42";HttpResult httpResult = this.apiService.doGet(url);System.out.println(httpResult.getCode());System.out.println(httpResult.getBody());}// 新增@Testpublic void testSaveItem() throws Exception {// /rest/item/interface/{id}String url = "/rest/item/interface";Map<String, Object> map = new HashMap<String, Object>();// title=测试RESTful风格的接⼝&price=1000&num=1&cid=888&status=1map.put("title", "测试APIService调⽤新增接⼝");map.put("price", "1000");map.put("num", "1");map.put("cid", "666");map.put("status", "1");HttpResult httpResult = this.apiService.doPost(url, map);System.out.println(httpResult.getCode());System.out.println(httpResult.getBody());}// 修改@Testpublic void testUpdateItem() throws Exception {// /rest/item/interface/{id}String url = "/rest/item/interface";Map<String, Object> map = new HashMap<String, Object>();// title=测试RESTful风格的接⼝&price=1000&num=1&cid=888&status=1map.put("title", "测试APIService调⽤修改接⼝");map.put("id", "44");HttpResult httpResult = this.apiService.doPut(url, map);System.out.println(httpResult.getCode());System.out.println(httpResult.getBody());}// 删除@Testpublic void testDeleteItemById() throws Exception {// /rest/item/interface/{id}String url = "/rest/item/interface/44";HttpResult httpResult = this.apiService.doDelete(url, null);System.out.println(httpResult.getCode());System.out.println(httpResult.getBody());}}以上这篇使⽤HttpClient调⽤接⼝的实例讲解就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

WebApi异步请求(HttpClient)

WebApi异步请求(HttpClient)

WebApi异步请求(HttpClient)还是那⼏句话:学⽆⽌境,精益求精⼗年河东,⼗年河西,莫欺少年穷学历代表你的过去,能⼒代表你的现在,学习代表你的将来废话不多说,直接进⼊正题:今天公司总部要求各个分公司把短信接⼝对接上,所谓的短信接⼝其实就是GET或者Post请求,接到这个任务感觉好Easy。

但是真正写起来,你会发现各种各样的问题,⽐如请求报401错误,报400错误,报..等等各种意想不到的错误!总之,在这个过程中尝试了三个⽅法:第⼀个⽅法如下(由于第⼀个⽅法封装的⽐较多,在此仅仅截图),如下:⼩矩形内得POST⽅法,结果发现报400错误。

紧接着我⼜尝试了第⼆种⽅法(这种⽅法⽐较简单,⼀般的POST请求都可以完成)第⼆种⽅法如下(2014年微信公众号开发中,好多请求我都⽤的这个⽅法):public static string GetPage(string posturl, string postData){//WX_SendNews news = new WX_SendNews();//posturl: news.Posturl;//postData:news.PostData;System.IO.Stream outstream = null;Stream instream = null;StreamReader sr = null;HttpWebResponse response = null;HttpWebRequest request = null;Encoding encoding = Encoding.UTF8;byte[] data = encoding.GetBytes(postData);// 准备请求...try{// 设置参数request = WebRequest.Create(posturl) as HttpWebRequest;CookieContainer cookieContainer = new CookieContainer();request.CookieContainer = cookieContainer;request.AllowAutoRedirect = true;request.Method = "POST";request.ContentType = "application/x-www-form-urlencoded";request.ContentLength = data.Length;outstream = request.GetRequestStream();outstream.Write(data, 0, data.Length);outstream.Close();//发送请求并获取相应回应数据response = request.GetResponse() as HttpWebResponse;//直到request.GetResponse()程序才开始向⽬标⽹页发送Post请求instream = response.GetResponseStream();sr = new StreamReader(instream, encoding);//返回结果⽹页(html)代码string content = sr.ReadToEnd();string err = string.Empty;return content;}catch (Exception ex){string err = ex.Message;return string.Empty;}}View Code结果这个⽅法报401错误。

【WebApi系列】浅谈HTTP在WebApi开发中的运用

【WebApi系列】浅谈HTTP在WebApi开发中的运用

【WebApi系列】浅谈HTTP在WebApi开发中的运⽤WebApi系列⽂章⼀概述在Web开发中,HTTP是必不可少的环节,在之前的【 MVC系列】中,我们并没有讲解HTTP,并不是因为 MVC与http关系不⼤,⽽是笔者个⼈觉得http与WebApi结合起来讲解,效果可能会更好⼀些,因此,暂且就把“详解http”作为【WebApi系列】的开篇⽂章。

1.http是什么?http是⼀种基于应⽤层的⼀种超⽂本传输协议(HyperText Transfer Protocol)2.本章主要讲解什么?(1).域名解析(2).TCP建⽴连接(三次握⼿)(3).TCP通信(传递数据)(4).断开连接(四次挥⼿)基于如上过程,我们将分系⼀下:(1)HTTP 请求(2)HTTP响应那么,我们先来看看。

HTTP协议定义了浏览器怎样向万维⽹服务器请求万维⽹⽂档,以及服务器怎样把⽂档传送给浏览器,⼤致⼯作流程图如下图所⽰。

1.⼀次TCP连接,需要三个过程:建⽴连接(三次握⼿)、传送数据和释放连接(四次挥⼿);2.http是基于TCP/IP协议的,且在五层模型中的运⽤层协议;4.服务器会根据客户端的请求,给予相应的响应(Responce);下⾯,我们将简要列举涉及到的部分关键技术,分别如下:(⼀)基于TCP/IP关于⽹络传输模型,早期⼤致有四层模型结构和七层模型结构,经过演变,最终将四层模型结构和七层模型结构归结为五层结构模型。

1.五层结构模型:运⽤层、传输层、⽹络层、数据链路层和物理层;2.传输协议:基于TCP/IP3.http协议是基于运⽤层的协议;4.五层结构中,从纵向上来说,客户端是从上往下传输,服务端是从下往上接受;5.五层结构中,从横向上来说,每⼀层的协议必须是相同的,⾄少是相似(⼀般我们在分析层时,将会横向上虚拟抽象,屏蔽其他层);6.运⽤层⽀持多种传输协议,如http协议,smtp协议,ftp协议等;7.区分⼏个概念:TCP/IP协议,TCP协议和UDP协议(1)TCP/IP协议:TCP/IP是⼀组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议和其他⼀些协议的协议组;(2)TCP协议:传输层中的传输控制协议;(3)UDP协议:传输层中的数据报问协议;(⼆)特点http协议具有很多优秀的特点,下图只是简要的列举其部分特点。

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

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

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

3.2 Calling a Web API From a .NET Client (C#)3.2 通过.NET客户端调用Web API(C#)本文引自:/web-api/overview/web-api-clients/calling-a-web-api -from-a-net-clientBy Mike Wasson | July 18, 2012作者:Mike Wasson | 日期:2012-7-18This tutorial shows how to call a web API from a console application, using HttpClient.本教程展示如何在一个控制台应用程序中使用HttpClient调用Web API。

In this tutorial, we will consume the "ProductStore" API, described in Creating a Web API that Supports CRUD Operations.在本教程中,我们将使用在“创建支持CRUD操作的Web API(本系列教程的第2.1小节—译者注)”小节中描述的“ProductStore”API。

Create the Console Application创建控制台应用程序Start Visual Studio and select New Project from the Start page. Or, from the File menu, select New and then Project.启动Visual studio,并从“开始”页面选择“新项目”。

或者从“文件”菜单选择“新建”,然后选择“项目”。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

回到目录
HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api的方法,基于api项目的特殊性,它需要有一个完全安全的环境,所以,你的api控制器看起来有点特别,只有5个方法,而且都是标准的http方法,我觉得这种设计很不错,很清晰,而且为了实现安全性,它不支持使用传统的表单数据,取而代之的是FromBody参数,它指拿HttpRequestMessage里参数,而不是所有的Request数据,这是基于安全方面的考虑。

一Api接口参数的标准性
Get方式,可以有多个重载,有多个参数
POST方式,只能有一个参数,并且用[FromBody]约束,如果有多个参数,需要以对象的方式进行传递
Put方式,只能有两个参数,其中一个是通过Request.QueryString方式进行传递的,作为要更新对象的主键,别一个是[FromBody]字段,也是一个字段,如果多个字段需要把它封装成对象
标准接口如图
二调用方,参数的标准性
在客户端进行接口调用时,我们以网页端为例,看一下网页端进行ajax跨域请求的代码
Get方式
$.ajax({
url: "http://localhost:52824/api/register",
type: "GET",
success: function (data) {
console.log("json:" + data);
}
});
Post方式
$.ajax({
url: "http://localhost:52824/api/register",
type: "POST",
data: { '': '1' },//这里键名称必须为空,多个参数请传对象,api端参数名必须为value
success: function (data) {
console.log("post:" + data);
}
});
三在控制台中实现Get方式获取接口数据(只有异步实现)
///<summary>
/// HttpClient实现Get请求
///</summary>
static async void dooGet()
{
string url =
"http://localhost:52824/api/register?id=1&leval=5";
//创建HttpClient(注意传入HttpClientHandler)
var handler = new HttpClientHandler()
{ AutomaticDecompression = DecompressionMethods.GZip };
using (var http = new HttpClient(handler))
{
//await异步等待回应
var response = await http.GetAsync(url);
//确保HTTP成功状态值
response.EnsureSuccessStatusCode();
//await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip)
Console.WriteLine(await
response.Content.ReadAsStringAsync());
}
}
四在控制台中实现Post方式提交数据(只有异步实现)
///<summary>
/// HttpClient实现Post请求
///</summary>
static async void dooPost()
{
string url = "http://localhost:52824/api/register";
var userId = "1";
//设置HttpClientHandler的AutomaticDecompression
var handler = new HttpClientHandler()
{ AutomaticDecompression = DecompressionMethods.GZip };
//创建HttpClient(注意传入HttpClientHandler)
using (var http = new HttpClient(handler))
{
//使用FormUrlEncodedContent做HttpContent
var content = new FormUrlEncodedContent(new Dictionary<string, string>()
{
{"", userId}//键名必须为空
});
//await异步等待回应
var response = await http.PostAsync(url, content);
//确保HTTP成功状态值
response.EnsureSuccessStatusCode();
//await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip)
Console.WriteLine(await
response.Content.ReadAsStringAsync());
}
}
五在控制台中实现Put方式提交数据(只有异步实现)
///<summary>
/// HttpClient实现Put请求
///</summary>
static async void dooPut()
{
string url =
"http://localhost:52824/api/register?userid=" + userId;
var userId = "1";
//设置HttpClientHandler的AutomaticDecompression
var handler = new HttpClientHandler()
{ AutomaticDecompression = DecompressionMethods.GZip };
//创建HttpClient(注意传入HttpClientHandler)
using (var http = new HttpClient(handler))
{
//使用FormUrlEncodedContent做HttpContent
var content = new FormUrlEncodedContent(new Dictionary<string, string>()
{
{"", "数据"}//键名必须为空
});
//await异步等待回应
var response = await http.PutAsync(url, content);
//确保HTTP成功状态值
response.EnsureSuccessStatusCode();
//await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip)
Console.WriteLine(await
response.Content.ReadAsStringAsync());
}
}。

相关文档
最新文档