Asp .Net Core入门教程1

在本片文章中,我们会从0开始,构建一个简单的api后端程序

目录

前言

什么是api

api,中文全称为应用程序编程接口,本篇中代指web api,也就是在网络上暴露给用户的请求接口。使用方可以通过发送网络请求的方式使用我提供的功能,比如增删查改等等。

为什么从api开始

相比包含razor的mvc系统,api项目结构更加简单,更有利于新手全面了解asp的结构。并且如果一个项目采用spa前端(通常比普通的razor page用户体验更好),那么后端只需要api就行了。

那么废话少说,我们开始吧。

教程

创建项目

首先,用visual studio的同学,请打开vs,新建项目,选择asp.net core程序注意一定选带core的,不带core的是另一个东西!!

选择后,点击下一步,然后取名为MyFirstApi

接着,点击下一步,选择api项目模板,不要添加身份认证!!

点击创建,完成项目的创建。
此时你的项目结构应该像这样:

运行项目

创建完毕后,我们废话不多说,直接运行它试试。点击上方的debug按钮开始运行

注:按钮里的iis express是visual studio自带的开发用服务器的名字,这个服务器实际上是iis的阉割版。

开始运行之后,vs会自动打开一个浏览器窗口,接着你可以在窗口上看到你的服务器返回的数据

只要看到数据,就代表运行成功了

理解基础的http请求处理流程

上一节中,我们通过浏览器请求到了我们后端服务器上的数据,那么它是怎么做到的呢?
首先,我们打开controller文件夹下的WeatherForecastController.cs文件,在它的第30行加个断点,重新运行程序,不久你就会发现在网页加载过程中,vs命中了这个断点。

而当你点击继续执行之后,网页中的数据立刻显示了出来。
很容易看出,网页请求这个url的时候,后端实际上用这个Get方法处理了数据,并且返回。那么为什么这个url会触发这个函数进行处理,而不是其它函数呢?
让我们看看WeatherForecastController类的上方,有一个RouteAttribute,他里边写了个[controller]。这种写法是一种约定写法,等效于写controller类的名字,也就是说,实际上[Route("[controller]")]等效于[Route("WeatherForecast")]。它的作用和它得得名字一样:标识controller对应的url路径。这里的意思也就是说这个controller类对应的url路径为/WeatherForecast,所有路径以这个开头的url都会被定向到这个类来处理。
但是,类本身是无法处理请求的,实际上最终处理请求的是类里的函数。那么我们怎么确定用哪个函数来处理请求呢?
可以看到,刚刚我们发现处理请求的函数Get,上边有个HttpGetAttribute实际上,这个attribute里也是可以加构造参数的,而构造参数是一个字符串,这个字符串对应controller下的子路径,我们项目中的不带参数的写法[HttpGet]等效于[HttpGet("")]也就是说这个方法用来处理"/WeatherForecast"路径下的""路径的请求,最终也就是请求"/WeatherForecast",所以我们浏览器对该路径的请求最后交给了Get`方法处理

改变路径

那么,理解了原理,我们就可以自己改变代码,看看改变的结果了。
比如现在不想让它返回天气信息,我想让它直接返回controller中的Summaries数组,那么我们可以把WeatherForecastController类替换为下方的类:

[ApiController]
[Route("WeatherForecast")]
public class WeatherForecastController : ControllerBase
{
    private static readonly string[] Summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

    private readonly ILogger<WeatherForecastController> _logger;

    public WeatherForecastController(ILogger<WeatherForecastController> logger)
    {
        _logger = logger;
    }

    [HttpGet("summaries")]
    public IEnumerable<string> Get()
    {
        return Summaries;
    }
}

然后,我们运行后,把路径改为/weatherforecast/summaries进行请求,就可以看到后端返回了Summaries的信息。

课后作业

  • 自己修改WeatherForecastController,添加更多的函数,处理不同路径的请求
  • 自己添加一个新的controller,处理其它路径的请求
  • 本教程中只提到了[HttpGet]attribute,细心的同学会发现还有[HttpPost]等其它attribute,它们实际上对应不同的请求方式。请上网查找http请求的不同方式的区别,为下一次课做准备。

本文章使用limfx的vsocde插件快速发布