为 IoT 构建和连接 ASP.NET Web API
介绍
如果您符合以下情况,本指南适合您:
- 物联网开发人员或与物联网人员合作,为连接的设备提供通信支持
- 对为设备构建 Web 服务感兴趣
- ASP.NET 开发人员
- 任何想要构建原生 HTTP Web 服务的人
我在本指南中的目标是说服您至少考虑使用 ASP.NET Web API 作为为 IoT 连接设备编程 Web 服务的主要框架。
阅读我之前的指南《物联网的 ASP.NET Web API 性能》,了解有关性能的更多信息。
构建小型 Web 服务
ASP.NET Web API 控制器用于定位和控制如何执行 URL 映射以向客户端提供结果和响应。
要创建新的 Controller,我们使用System.Web.Http.ApiController类作为对象的基类。稍后,为该路由设置 HTTP 动词函数。使用ASP.NET Web API 框架的Route属性设置路由。其余部分基于 C# 编程,从函数返回值并接受函数作为参数的值。
// Add the namespace imports
namespace Sample {
// Add the route attribute, this would be accessible at: localhost:12345/api/microcontrollers/
[Route("api/microcontrollers")]
public class MicroControllers : ApiController { // Note the inheritance
// Adding the HTTP helpers
public string Get() {
return "Hello, world!";
}
[Route("api/microcontrollers/{name}")]
public void Post(string name) {
dataModel._name = name; // Save the naem
}
[Route("api/microcontrollers/{id}")]
public void Delete(int id) {
dataModel.Delete(x => x._id == id); // Sample function to delete the data.
}
/*
* You can add other functions named with the HTTP verb
* such as:
* 1. PUT
* 2. OPTIONS
* etc.
*/
}
}
这是用于控制器的完整 Web API。虽然它不支持 API 的许多功能,但它应该可以帮助您了解映射 Web API 的优势。注意到这个程序有多简单了吗?其余工作由处理方法完成,您可以在其中定义如何为 URL 映射定义例程。
编写其他 HTTP URL 帮助程序
由于该程序非常简单,我将向您展示如何在应用程序的特定控制器中添加更多要处理的 URL。请注意,我们已使用控制器操作上的Route[("path")]属性将应用程序路由到 HTTP 请求。我们可以在其他操作上使用这些,以在同一个控制器中定义不同的路由。
查看上面的代码并查看 HTTP GET 操作处理程序。如果我们想处理另一个 GET 请求怎么办?
为此,我们可以更改想要映射到的 URL,并仍然在此控制器下处理该请求。像这样:
Route("api/microcontrollers/anotherurl")]
public string Get() {
return "Hello world
现在,如果我们将请求更改为 URL localhost:12345/api/microcontrollers/anotherurl,我们将被映射到一个操作,并且结果将从该操作生成。这确实很有帮助,并且可以轻松处理同一控制器下的多个 URL 和操作,而无需为每个要映射的 URL 创建单独的模块或引发错误。
连接到 Web 服务
我们知道,我们的服务是基于 HTTP 的基本服务,可以使用任何 HTTP 客户端轻松使用。大多数框架都支持 HTTP 通信,每个操作系统都有允许通过网络进行基于 HTTP 的通信的 API。
基本上,在开始工作之前,您无需担心任何事情。HTTP 客户端以 C#、Java、C++、Python 和几乎所有其他编程语言提供,以促进应用程序内网络通信。我将带您了解允许与您的服务进行 HTTP 通信的 .NET 框架的 HTTP 客户端。
Http客户端
.NET 框架通常使用HttpClient对象(与WebClient相对)。这为您的应用程序提供了对网络通信的访问,并允许您使用 HTTP 动词(如GET、POST等)发送请求。您还可以在序列化发布过程的数据后将内容发布到服务器。
与其他IDisposable对象一样,HttpClient还允许您将其余的内存清理和资源处置工作留给 .NET 框架。这样,大多数时候,您就可以专注于网络编程,而不是内存清理。
接下来,让我们看看如何在 .NET 应用程序中使用HttpClient对象连接到服务。
请注意,如果您可以在应用程序中定位System.Net.Http命名空间,则可以在任何项目或应用程序中使用HttpClient 。
该程序的主要功能如下所示:
// // Namespace import
using System.Net.Http;
// Deep inside the function
using (var client = new HttpClient()) {
// Use the API here.
}
这是您使用应用服务时应使用的模板。例如,从 API 获取“Hello world”消息的基本程序如下所示:
using (var client = new HttpClient())
{
// It is recommended to add a base address, instead of pushing this to the HTTP request functions.
client.BaseAddress = new Uri("http://localhost:12345/");
// Get the response from the API
var response = await client.GetAsync("api/microcontrollers/");
// Check if the request succeeded.
if (response.IsSuccessStatusCode)
{
// Get the message.
var msg = await response.Content.ReadAsStringAsync();
Console.WriteLine(msg); // Hello, world!
}
}
这样,您就可以远程访问 API。其他 ASP.NET 基础知识类似。例如,HttpClient允许您使用其他函数执行其他 HTTP 请求,例如POST,您可以在其中将一些内容发布到服务器。请注意,发布需要一些复杂的方法,您还必须包装并以字节数组的形式将数据传递给服务器。然后在服务器端加载和读取此数据。
对于微控制器来说,这没什么意义,因为您不太可能传输媒体(因此使用字节数组)。因此,您当然可以查看有关微控制器上 .NET 框架中的网络编程的众多文章之一。
结论
感谢您的阅读。我希望您现在了解了 ASP.NET 与传统 WCF 框架相比的诸多优势。此外,我希望平台之间的相似性能让您意识到 IoT 的概念实际上并不像人们所认为的那样“新”!
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~