最初的WebApi

前置条件

  1. 安装dotnet core sdk(7.0)
    下载 .NET 7.0 (Linux、macOS 和 Windows) (microsoft.com)
  2. 安装visual studio code,并安装C# 插件
    Visual Studio Code - Code Editing. Redefined
  3. 安装Postgresql数据库
    为了方便,我们使用docker来安装Postgresql在docker中启动PostgreSQL服务 | prebug.cn

开始

  1. 先为我们的代码找一个存放的位置,我用的是windows 11操作系统,以下的操作如果没有额外说明,也都会是在此系统下进行。首先打开终端(如果不会,WIN+X组合键弹出的菜单中,选择【终端(I)】即可),并逐条来执行以下命令,每个命令都有解释,但不会详细展开,以后也是这个风格。
    1
    2
    3
    4
    5
    6
    7
    // 回到根目录下,因为是使用的固态硬盘,所以没有必要进行分区
    cd c:\
    // 建个目录(也叫文件夹,看习惯吧)用来存放代码,
    // -p参数帮助我们直接建好较深的路径,而不需要逐级去创建
    mkdir -p /exercise/c-sharp/dream/
    // 切换到我们新建的目录之下
    cd C:\Exercise\c-sharp\dream\
  2. 验证一下我们的dotnet core sdk是不是已经安装配置好了
    1
    2
    // 此时使用dotnet info 和 dotnet --list-sdks均可,因为我主要想看看sdk,所以我们选择后者
    dotnet --list-sdks
    我本机响应如下,具体显示版本自然是与之前安装的版本相关
    1
    7.0.300-preview.23122.5 [C:\Program Files\dotnet\sdk]
  3. 使用sdk自带的项目模板来创建一个WebApi项目
    1
    2
    3
    4
    5
    // 使用dotnet new list可以查看所有可以通过dotnet new命令来创建的项目模板,
    // 我们根据需要创建一个webapi项目。
    // -o 参数指定输出路径,不指定则会输出在当前目录。
    // 更多参数可以查看dotnet new webapi -h。
    dotnet new webapi -o WebAPI
  4. 此时WebApi项目的基础结构就已经完成了,我们不着急看项目的内容,直接先来把代码跑起来看看
    1
    2
    3
    4
    5
    6
    // 先看一下我们的当前目录位置,如果没乱动的话,现在还应该在C:\Exercise\c-sharp\dream\目录下
    pwd
    // 上一步我们把webapi的项目输出指定在了WebAPI下,所以我们还是先切换到该目录之下
    cd .\WebAPI\
    // 现在可以把我们的代码(虽然没有一行是亲自写的)跑起来了
    dotnet run
    响应结果正常应该是这个样子
    1
    2
    3
    4
    5
    6
    7
    8
    9
    正在生成...
    info: Microsoft.Hosting.Lifetime[14]
    Now listening on: [http://localhost:5267](http://localhost:5267)
    info: Microsoft.Hosting.Lifetime[0]
    Application started. Press Ctrl+C to shut down.
    info: Microsoft.Hosting.Lifetime[0]
    Hosting environment: Development
    info: Microsoft.Hosting.Lifetime[0]
    Content root path: C:\Exercise\c-sharp\dream\WebAPI
    这里面提供了这么几个信息,一是监听地址为http://localhost:5267,也就是我们系统跑起来之后用于访问的url,二是可以使用ctrl+c组合键关掉系统,三是环境变量,目前我们是使用的开发环境(Development),最后是我们的项目内容的根目录。
  5. 测试一下
    可以尝试在浏览器里访问一下上一步中得到的系统地址http://localhost:5267,我不想截图,所以我会用命令行的形式进行下面的测试
    1
    2
    3
    4
    5
    // 先测试上一步中得到的系统地址[http://localhost:5267](http://localhost:5267),
    // 浏览器访问使用的是GET方法,我们也一样使用GET方法。
    // Windows下的终端是PowerShell,所以我们使用的是Invoke-WebRequest命令,而不是curl,
    // 当然如果执行curl也会有结果,但这里的curl也只是Invoke-WebRequest的别名而已。
    Invoke-WebRequest -Method Get -Uri http://localhost:5267
    此时我们得到的响应结果可能和预期不一致,居然是一个“Invoke-WebRequest : 远程服务器返回错误: (404) 未找到。”的错误。
    这个原因很简单,因为我们是使用了一个webapi模板,这个模板中是没有默认的页面(诸如index.html之类)的。当然我们的模板项目也不是一个纯纯的空项目,也还是提供了一个APIController的。
    1
    2
    3
    // 后面看代码的时候,我们会看到模板中提供了WeatherForecastController,
    // 而且实现了Get方法,所以我们可以用以下命令进行测试
    Invoke-WebRequest -Method Get -Uri http://localhost:5267/weatherforecast
    这次我们应该会得到一个正常(状态码为200)的响应结果了
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    StatusCode        : 200
    StatusDescription : OK
    Content : [{"date":"2023-04-10","temperatureC":10,"temperatureF":49,"summary":"Hot"},{"date":"2023-04-11","temperatureC":40,"temperatureF":103,"summary":"Warm"},{"date":"2023-04-12","temperatureC":-
    15,"temperat...
    RawContent : HTTP/1.1 200 OK
    Transfer-Encoding: chunked
    Content-Type: application/json; charset=utf-8
    Date: Sun, 09 Apr 2023 14:43:10 GMT
    Server: Kestrel

    [{"date":"2023-04-10","temperatureC":10,"temperature...
    Forms : {}
    Headers : {[Transfer-Encoding, chunked], [Content-Type, application/json; charset=utf-8], [Date, Sun, 09 Apr 2023 14:43:10 GMT], [Server, Kestrel]}
    Images : {}
    InputFields : {}
    Links : {}
    ParsedHtml : mshtml.HTMLDocumentClass
    RawContentLength : 383
    本篇到此结束,下一篇我们再来看看模板项目里究竟有哪些代码内容。

最初的WebApi
http://prebug.cn/2023/04/09/webapi-010/
作者
任志伟
发布于
2023年4月9日
许可协议