来自“Vanilla”项目模板的ASP.NET Web API核心-第一部分


我想在本系列文章中重点介绍的是如何使用ASP.NET核心创建一个简单的HTTP API,该API涵盖了HTTP GET,POST,PUT,DELETE和PATCH等主要HTTP谓词。

鉴于需要涵盖的信息量太大,我将整个主题划分为多篇文章。

作为学习该技术的用例,我们将创建一个英语词汇示例应用程序,其中包含英语词汇,其定义以及如何使用这些词汇组成句子。

但是,这一切都是从一个“空”的项目模板开始的,而不是使用“Web API”项目模板,因为我相信,为了更好地理解底层技术在引擎盖下是如何工作的,我们应该从最根本的BIT开始,并从那里创建和改进BIT。

我还相信,更好地理解底层技术是如何工作的,可以更快地进行调试,也可以让开发人员进行更优雅的改进。

本文中显示的所有项目和代码都是使用一些工具和框架创建的,这些工具和框架在先决条件部分中定义。

先决条件

  1. Visual Studio 2015
  2. 。NET核心
  3. PostMan 

Click here若要查找有关如何安装开始创建ASP.NET核心API所需的所有位的完整信息集,请执行以下操作。

创建HTTP API

1.新建一个空的ASP.NET核心项目

从Visual Studio 2015创建新的ASP.NET核心项目。当您看到以下屏幕截图时,突出显示“。NET核心”在左窗格上,然后选择“ASP.NET核心Web应用程序(。NET核心)”在右窗格上。

随后,当向开发人员呈现以下截图时,开发人员应该选择“空”项目。

需要注意的一点是,尽管“空”项目模板是VS2015中最常见的项目模板,IDE仍然会自动生成一些文件依赖项,供开发人员使用,如下面的截图所示。

2.ASP.NET核心中的默认Web服务器

在深入分析Program.cs和Startup.cs文件(这两个文件是在创建ASP.NET Core项目时自动创建的)之前,让我们先谈谈ASP.NET Core中使用的默认web服务器。

默认情况下,ASP.NET Core使用的是Kestrel web服务器,它是基于Libuv的开源跨平台web服务器。Libuv是一个多平台支持库,它专注于异步I/O。可以找到Kestrel web服务器和libuv库的详细实现here或者here

ASP.NET核心应用程序可以在不与IIS或IIS Express集成的情况下工作。但是,它肯定需要一个web服务器,在本例中就是Kestrel。

在开发中,使用Kestrel编写和测试ASP.NET核心应用程序是很好的,即使它没有IIS集成。然而,在生产中,几乎可以肯定需要IIS或另一个反向代理服务器,如Apache,或Nginx。原因是,反向代理服务器提供了许多Kestrel web服务器不支持的重要特性。所包括的一些主要特征是:通过主机头转发端口80/443,进程生存期管理,证书管理,静态文件服务和gzip压缩,URL重写。有关ASP.NET核心应用程序如何与Kestrel一起工作的基本知识,请参阅here此外,还可以找到ASP.NET核心应用程序如何与Kestrel一起工作以及如何与IIS集成的基础知识here

还有,这个article对于理解如何将IIS设置为ASP.NET核心应用程序和Kestrel web服务器的反向代理也非常有用。

3.分析Program.cs和Startup.cs

在我们用一个空的项目模板创建ASP.NET Core web app并通过点击VS 2015中的“IIS Express”运行应用程序之后,我们将看到浏览器上显示的一个页面,页面上显示“Hello World!”。

当我们运行应用程序时,两个主文件中的下列方法,程序。csstartup.cs,是按顺序执行的。

1. public static void Main(string[] args) - Program.cs
2. public void ConfigureServices(IServiceCollection services)– Program.cs
3. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) - Startup.cs

返回到浏览器页面的“Hello World!”消息来自以下代码执行。

让我们来看看公共静态void Main(string[]args)的程序。cs

开发人员可以参考许多文章来了解那些函数调用是什么,我不会在这里重复这些。有三个函数调用(使用甲孕酮,UseIISIntegration和UseStartup<T>),它们也是重要的和自解释的。

4.使用ASP.NET核心创建第一个HTTP GET方法

创建第一个HTTP GET API涉及几个步骤。但是在我们这么做之前,让我们注释掉VS2015提供的一些默认生成的代码。

注释掉app.run()方法调用,如下图所示配置方法。

创建第一个HTTP GET API的一般步骤。

a.将MVC服务添加到配置保留方法(startup.cs)。
b.将MVC中间件添加到请求管道中配置在方法(startup.cs)中。
c.创建一个模型类来表示要返回到HTTP API客户端的数据。
d.创建一个至少具有一个公共方法的控制器类。
e.设置路由,使客户端知道如何使用正确的URL访问API。
f.用Postman测试HTTP API。

a.在ConfigureReservices方法(startup.cs)中添加MVC服务。

添加第一行代码,services.addMVC();配置保留方法。但是,我们可以看到下面有一条弯曲的线AddMvc()方法。

如果我们将鼠标移到该方法,在VS2015中,它会显示一个灯泡图标,其中包含一条信息性消息,说明缺少什么,以便调用AddMvc()方法。

点击“添加软件包Microsoft.aspnetcore.mvc 1.1.1而VS 2015足够聪明,可以添加缺少的块金包,在本例中,块金包是Microsoft.aspnetcore.mvc 1.1.1。

b.将MVC服务添加到配置方法(startup.cs)。

添加App.UseMVC();配置方法,如下面的屏幕截图所示。

c.创建一个模型类来表示要返回到HTTP API客户端的数据。

在我们创建第一个模型类之前,最好有一个文件夹来存储所有的模型类。

创建一个模型类,英语模,和英语无句子模式,以表示要返回到HTTP API客户端的数据。

最后,创建一个数据存储模拟器,将所有硬编码的模型数据返回给控制器。

d.创建一个至少具有一个公共方法的控制器类。

在我们创建第一个controller类之前,制作一个文件夹,将所有的controller类存储在其中会很棒。

然后,在上面的文件夹中创建一个vanilla控制器类,代码如下所示。

Controller类驻留在Microsoft.ASPNetCore.MVC名称空间,因此您需要确保以下行包含在名称空间定义中。

using Microsoft.AspNetCore.Mvc;

之后,创建一个方法,GetEnglishVocabs(),如下面的截图所示。

但是,如果我们运行应用程序,并用任何HTTP客户端测试它,在本例中,我们使用邮递员,它将无法工作。原因是没有关于路由选择它是ASP.NET核心Web的重要机制之一。

e.设置路由,使客户端知道如何使用正确的URL访问API

在我们谈论如何在ASP.NET核心web中定义路由之前,我们需要知道在ASP.NET核心web中有两种路由实现:基于常规的路由基于属性的路由

基于常规的路由,我们必须在app.useMVC()中包含路由信息;中的方法启动cs下面的截图显示了如何实现。

然而,在本文中,我们将重点讨论如何使用基于属性的路由相反,这是因为在HTTP Web API类型的系统中使用它更精确,更清晰。

因此,我们首先需要定义[路线(“API/英语词汇”)]属性,后跟[HttpGet()]属性,如下面的屏幕截图所示。

使用此设置,当我们从任何HTTP客户端访问URL时,我们必须组合主机URL,将其与中定义的相对URL连接起来路线属性,最后,将它与HttpGet()属性(如果有的话)。

f.用Postman测试HTTP API

现在,通过在VS 2015中按下“IIS Express”下拉按钮运行应用程序来运行ASP.NET核心Web API应用程序,并使用Postman进行测试,如下图所示。如果它工作成功,它应该返回所有的英语词汇,它的定义和句子,我们已经硬编码在代码。

请注意,屏幕截图中显示的端口号可能对每个开发人员都不相同,它会验证在运行的IIS Express中使用哪个端口。


这只是关于ASP.NET核心Web API的一系列文章的开始。继续关注!