最初的WebApi
前置条件
- 安装dotnet core sdk(7.0)
下载 .NET 7.0 (Linux、macOS 和 Windows) (microsoft.com) - 安装visual studio code,并安装C# 插件
Visual Studio Code - Code Editing. Redefined - 安装Postgresql数据库
为了方便,我们使用docker来安装Postgresql在docker中启动PostgreSQL服务 | prebug.cn
开始
- 先为我们的代码找一个存放的位置,我用的是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\ - 验证一下我们的dotnet core sdk是不是已经安装配置好了我本机响应如下,具体显示版本自然是与之前安装的版本相关
1
2// 此时使用dotnet info 和 dotnet --list-sdks均可,因为我主要想看看sdk,所以我们选择后者
dotnet --list-sdks1
7.0.300-preview.23122.5 [C:\Program Files\dotnet\sdk]
- 使用sdk自带的项目模板来创建一个WebApi项目
1
2
3
4
5// 使用dotnet new list可以查看所有可以通过dotnet new命令来创建的项目模板,
// 我们根据需要创建一个webapi项目。
// -o 参数指定输出路径,不指定则会输出在当前目录。
// 更多参数可以查看dotnet new webapi -h。
dotnet new webapi -o WebAPI - 此时WebApi项目的基础结构就已经完成了,我们不着急看项目的内容,直接先来把代码跑起来看看响应结果正常应该是这个样子
1
2
3
4
5
6// 先看一下我们的当前目录位置,如果没乱动的话,现在还应该在C:\Exercise\c-sharp\dream\目录下
pwd
// 上一步我们把webapi的项目输出指定在了WebAPI下,所以我们还是先切换到该目录之下
cd .\WebAPI\
// 现在可以把我们的代码(虽然没有一行是亲自写的)跑起来了
dotnet run这里面提供了这么几个信息,一是监听地址为http://localhost:5267,也就是我们系统跑起来之后用于访问的url,二是可以使用ctrl+c组合键关掉系统,三是环境变量,目前我们是使用的开发环境(Development),最后是我们的项目内容的根目录。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,我不想截图,所以我会用命令行的形式进行下面的测试此时我们得到的响应结果可能和预期不一致,居然是一个“Invoke-WebRequest : 远程服务器返回错误: (404) 未找到。”的错误。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
这个原因很简单,因为我们是使用了一个webapi模板,这个模板中是没有默认的页面(诸如index.html之类)的。当然我们的模板项目也不是一个纯纯的空项目,也还是提供了一个APIController的。这次我们应该会得到一个正常(状态码为200)的响应结果了1
2
3// 后面看代码的时候,我们会看到模板中提供了WeatherForecastController,
// 而且实现了Get方法,所以我们可以用以下命令进行测试
Invoke-WebRequest -Method Get -Uri http://localhost:5267/weatherforecast本篇到此结束,下一篇我们再来看看模板项目里究竟有哪些代码内容。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18StatusCode : 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/