练习 - 运行应用
在上一个练习中,你为团队的 API 编写了实现数据库操作的代码。 本练习测试已连接到数据库的 API。
运行 API
在终端窗格运行应用:
dotnet run
检查运行应用的输出,并留意以下信息:
- EF Core 在 SQL 命令执行时将其作为
info
日志事件回显。 - 如果数据库尚不存在,则使用 SQL
CREATE
命令定义表和索引。 - 如果数据库尚未设定种子,则执行
INSERT
命令以添加种子数据。 - 为了安全,参数值不会回显到控制台。 可以使用 EnableSensitiveDataLogging 更改此设置。
- EF Core 在 SQL 命令执行时将其作为
使用 SQLite 资源管理器浏览种子数据库。 每个表都有数据。
转到 Swagger
现在 API 正在运行,请测试 API 以查看操作是否正常运作。 API 配置为使用 Swagger 提供测试 UI。 Swagger 是一种工具,可帮助你设计、生成、记录和使用 RESTful Web 服务。
在运行应用后显示的输出中,找到应用侦听的 HTTP URL。 输出与以下示例类似:
info: Microsoft.Hosting.Lifetime[14] Now listening on: http://localhost:5200
请按住 Ctrl 并选择该 URL 以打开它。 浏览器将打开 API 的
/
位置,返回文本Contoso Pizza management API. Go to /swagger to open the Swagger test UI.
在浏览器的地址栏中,将
/swagger
添加到 URL 的末尾,然后选择 Enter。
测试 CRUD 操作
在下面的步骤中,你将使用 Swagger UI 按照客户端应用程序采用的方式来测试 API 的每一个操作。 每次操作后,在 SQLite 资源管理器中检查数据库以查看发生的数据库更改。
请求披萨的完整列表:
- 在“披萨”标题下,展开“GET /Pizza”操作并选择“试用”按钮。
- 选择“执行”按钮。
API(在响应正文下)以 JSON 形式返回披萨列表。
[ { "id": 1, "name": "Meat Lovers", "sauce": null, "toppings": null }, { "id": 2, "name": "Hawaiian", "sauce": null, "toppings": null }, { "id": 3, "name": "Alfredo Chicken", "sauce": null, "toppings": null } ]
提示
为什么
sauce
和toppings
属性为 null? 结果是正常的,因为在PizzaService.GetAll
方法中,你没有使用Include
扩展方法来指定应加载导航属性。请求单个披萨:
- 向下滚动到“GET /Pizza/{id}”操作并展开它,然后选择“试用”按钮。
- 在“ID”字段中,输入“2”,然后选择“执行”。
API 返回“夏威夷”披萨。 请注意,已填充
sauce
和toppings
属性,因为PizzaService.GetById
方法使用Include
扩展方法。添加新的披萨:
向上滚动到“POST /Pizza”操作(位于已使用的 GET 操作之间)并展开,然后选择“试用”按钮。
在“请求正文”文本框中,粘贴以下 JSON:
{ "name": "BBQ Beef", "sauce": { "name": "BBQ", "isVegan": false }, "toppings": [ { "name": "Smoked Beef Brisket", "calories": 250 } ] }
选择“执行”。
API 返回填充了
id
属性的新披萨。将另一种配料添加到烧烤牛肉披萨:
- 向下滚动到“PUT /Pizza/{id}/addtopping”操作并展开它,然后选择“试用”按钮。
- 在 id 字段中输入 4。
- 在 toppingId 字段中,输入 5。
- 选择“执行”。
API 更新披萨并返回成功代码。 在数据库中,一条记录已添加到
PizzaTopping
以将披萨与配料相关联。更改烧烤牛肉披萨上的酱汁:
- 向下滚动到“PUT /Pizza/{id}/updatesauce”操作并展开它,然后选择“试用”按钮。
- 在 id 字段中输入 4。
- 在 sauceId 字段中,输入 2。
- 选择“执行”。
API 更新披萨并返回成功代码。 在数据库中,
Pizza
记录已更新,将披萨与新酱汁相关联。返回到“GET /Pizza/{id}”操作,通过将“id”字段设置为“4”来请求烧烤牛肉披萨。 然后选择“执行”。 请注意,
sauce
和toppings
属性已填充。{ "id": 4, "name": "BBQ Beef", "sauce": { "id": 2, "name": "Alfredo", "isVegan": false }, "toppings": [ { "id": 5, "name": "Pineapple", "calories": 75 }, { "id": 6, "name": "Smoked Beef Brisket", "calories": 250 } ] }
你刚刚意识到,用阿尔弗雷多酱和菠萝制作的烟熏牛腩披萨是个糟糕的主意。
删除披萨:
- 找到“DELETE /Pizza/{id}”操作并将其展开,然后选择“试用”按钮。
- 在 id 字段中输入 4。
- 选择“执行”。
API 删除披萨并返回成功代码。 数据库中
PizzaTopping
中的Pizza
记录和相关联的记录会被删除。在运行应用的终端中,选择 Ctrl+C 停止正在运行的应用。
提示
你可以试用该应用。 每当想从新数据库开始时,停止应用并删除 ContosoPizza.db、.db-shm 和 .db-wal 文件。 然后再次运行应用。
干得漂亮! 该应用正在按预期使用数据库! 在下一个单元中,请从现有数据库搭建实体模型基架。