练习 - 运行应用

已完成

在上一个练习中,你为团队的 API 编写了实现数据库操作的代码。 本练习测试已连接到数据库的 API。

运行 API

  1. 在终端窗格运行应用:

    dotnet run
    
  2. 检查运行应用的输出,并留意以下信息:

    • EF Core 在 SQL 命令执行时将其作为 info 日志事件回显。
    • 如果数据库尚不存在,则使用 SQL CREATE 命令定义表和索引。
    • 如果数据库尚未设定种子,则执行 INSERT 命令以添加种子数据。
    • 为了安全,参数值不会回显到控制台。 可以使用 EnableSensitiveDataLogging 更改此设置。
  3. 使用 SQLite 资源管理器浏览种子数据库。 每个表都有数据。

转到 Swagger

现在 API 正在运行,请测试 API 以查看操作是否正常运作。 API 配置为使用 Swagger 提供测试 UI。 Swagger 是一种工具,可帮助你设计、生成、记录和使用 RESTful Web 服务。

  1. 在运行应用后显示的输出中,找到应用侦听的 HTTP URL。 输出与以下示例类似:

    info: Microsoft.Hosting.Lifetime[14]
          Now listening on: http://localhost:5200
    
  2. 请按住 Ctrl 并选择该 URL 以打开它。 浏览器将打开 API 的 / 位置,返回文本 Contoso Pizza management API. Go to /swagger to open the Swagger test UI.

  3. 在浏览器的地址栏中,将 /swagger 添加到 URL 的末尾,然后选择 Enter

测试 CRUD 操作

在下面的步骤中,你将使用 Swagger UI 按照客户端应用程序采用的方式来测试 API 的每一个操作。 每次操作后,在 SQLite 资源管理器中检查数据库以查看发生的数据库更改。

  1. 请求披萨的完整列表:

    1. 在“披萨”标题下,展开“GET /Pizza”操作并选择“试用”按钮
    2. 选择“执行”按钮。

    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
        }
        ]
    

    提示

    为什么 saucetoppings 属性为 null? 结果是正常的,因为在 PizzaService.GetAll 方法中,你没有使用 Include 扩展方法来指定应加载导航属性。

  2. 请求单个披萨:

    1. 向下滚动到“GET /Pizza/{id}”操作并展开它,然后选择“试用”按钮。
    2. 在“ID”字段中,输入“2”,然后选择“执行”。

    API 返回“夏威夷”披萨。 请注意,已填充 saucetoppings 属性,因为 PizzaService.GetById 方法使用 Include 扩展方法。

  3. 添加新的披萨:

    1. 向上滚动到“POST /Pizza”操作(位于已使用的 GET 操作之间)并展开,然后选择“试用”按钮

    2. 在“请求正文”文本框中,粘贴以下 JSON:

      {
        "name": "BBQ Beef",
        "sauce": {
          "name": "BBQ",
          "isVegan": false
        },
        "toppings": [
          {
            "name": "Smoked Beef Brisket",
            "calories": 250
          }
        ]
      }
      
    3. 选择“执行”。

    API 返回填充了 id 属性的新披萨。

  4. 将另一种配料添加到烧烤牛肉披萨:

    1. 向下滚动到“PUT /Pizza/{id}/addtopping”操作并展开它,然后选择“试用”按钮。
    2. 在 id 字段中输入 4。
    3. 在 toppingId 字段中,输入 5。
    4. 选择“执行”。

    API 更新披萨并返回成功代码。 在数据库中,一条记录已添加到 PizzaTopping 以将披萨与配料相关联。

  5. 更改烧烤牛肉披萨上的酱汁:

    1. 向下滚动到“PUT /Pizza/{id}/updatesauce”操作并展开它,然后选择“试用”按钮。
    2. 在 id 字段中输入 4。
    3. 在 sauceId 字段中,输入 2。
    4. 选择“执行”。

    API 更新披萨并返回成功代码。 在数据库中,Pizza 记录已更新,将披萨与新酱汁相关联。

  6. 返回到“GET /Pizza/{id}”操作,通过将“id”字段设置为“4”来请求烧烤牛肉披萨。 然后选择“执行”。 请注意,saucetoppings 属性已填充。

    {
        "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
            }
        ]
    }
    
  7. 你刚刚意识到,用阿尔弗雷多酱和菠萝制作的烟熏牛腩披萨是个糟糕的主意。

    删除披萨:

    1. 找到“DELETE /Pizza/{id}”操作并将其展开,然后选择“试用”按钮。
    2. 在 id 字段中输入 4。
    3. 选择“执行”。

    API 删除披萨并返回成功代码。 数据库中 PizzaTopping 中的 Pizza 记录和相关联的记录会被删除。

  8. 在运行应用的终端中,选择 Ctrl+C 停止正在运行的应用。

提示

你可以试用该应用。 每当想从新数据库开始时,停止应用并删除 ContosoPizza.db、.db-shm 和 .db-wal 文件。 然后再次运行应用。

干得漂亮! 该应用正在按预期使用数据库! 在下一个单元中,请从现有数据库搭建实体模型基架。