From 597e944184e4443da20bb651dcdc675d10fb7048 Mon Sep 17 00:00:00 2001 From: Lukas Pilney Date: Sat, 8 Feb 2025 04:20:43 +0100 Subject: [PATCH 01/22] Updated first-web-api tutorial (#34558) --- aspnetcore/tutorials/first-web-api.md | 49 ++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/aspnetcore/tutorials/first-web-api.md b/aspnetcore/tutorials/first-web-api.md index db4401248098..a52c0e429534 100644 --- a/aspnetcore/tutorials/first-web-api.md +++ b/aspnetcore/tutorials/first-web-api.md @@ -55,7 +55,7 @@ The following diagram shows the design of the app. * Select the **ASP.NET Core Web API** template and select **Next**. * In the **Configure your new project dialog**, name the project *TodoApi* and select **Next**. * In the **Additional information** dialog: - * Confirm the **Framework** is **.NET 8.0 (Long Term Support)**. + * Confirm the **Framework** is **.NET 9.0 (Long Term Support)**. * Confirm the checkbox for **Use controllers(uncheck to use minimal APIs)** is checked. * Confirm the checkbox for **Enable OpenAPI support** is checked. * Select **Create**. @@ -67,6 +67,9 @@ A NuGet package must be added to support the database used in this tutorial. * From the **Tools** menu, select **NuGet Package Manager > Manage NuGet Packages for Solution**. * Select the **Browse** tab. * Enter **Microsoft.EntityFrameworkCore.InMemory** in the search box, and then select `Microsoft.EntityFrameworkCore.InMemory`. +* Select the **Project** checkbox in the right pane and then select **Install**. +* Enter **Swashbuckle.AspNetCore.SwaggerUI** in the search box, and then select `Swashbuckle.AspNetCore.SwaggerUI`. + * Select the **Project** checkbox in the right pane and then select **Install**. # [Visual Studio Code](#tab/visual-studio-code) @@ -79,13 +82,14 @@ A NuGet package must be added to support the database used in this tutorial. dotnet new webapi --use-controllers -o TodoApi cd TodoApi dotnet add package Microsoft.EntityFrameworkCore.InMemory + dotnet add package Swashbuckle.AspNetCore.SwaggerUI code -r ../TodoApi ``` These commands: * Create a new web API project and open it in Visual Studio Code. - * Add a NuGet package that is needed for the next section. + * Add a NuGet packages that are needed for the next section. * Open the *TodoApi* folder in the current instance of Visual Studio Code. [!INCLUDE[](~/includes/vscode-trust-authors-add-assets.md)] @@ -94,10 +98,47 @@ A NuGet package must be added to support the database used in this tutorial. [!INCLUDE[](~/includes/package-reference.md)] -### Test the project +### Test the Project + +The project template creates a `WeatherForecast` API with OpenAPI JSON documentation. By default, you can access the documentation while the project is running by navigating your browser to `https://localhost:/openapi/v1.json`, where `` is a randomly chosen port number set during project creation. + +To use the [Swagger](xref:tutorials/web-api-help-pages-using-swagger) UI for testing the API, you need to modify the `Program.cs` file in your project. + +#### Steps: +1. Add `SwaggerUI` to the app. +2. Set the `SwaggerEndpoint` to the location of your OpenAPI documentation. + +#### Updated `Program.cs` + +```csharp +var builder = WebApplication.CreateBuilder(args); -The project template creates a `WeatherForecast` API with support for [Swagger](xref:tutorials/web-api-help-pages-using-swagger). +// Add services to the container. +builder.Services.AddControllers(); +// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi +builder.Services.AddOpenApi(); +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + // Add SwaggerUI + app.UseSwaggerUI(options => + // Add SwaggerEndpoint + options.SwaggerEndpoint("/openapi/v1.json", "v1") + ); + app.MapOpenApi(); +} + +app.UseHttpsRedirection(); + +app.UseAuthorization(); + +app.MapControllers(); + +app.Run(); +``` # [Visual Studio](#tab/visual-studio) Press Ctrl+F5 to run without the debugger. From e5b3610fe7caba428ce90965df0b552380a9a33d Mon Sep 17 00:00:00 2001 From: wadepickett Date: Thu, 13 Feb 2025 13:51:37 -0800 Subject: [PATCH 02/22] Additional samples, ddoc and screenshot update to lukekaese's PR --- aspnetcore/tutorials/first-web-api.md | 94 ++++++--- .../first-web-api/_static/9/post.png | Bin 0 -> 147018 bytes .../Controllers/TodoItemsController.cs | 13 +- .../samples/9.0/TodoApi/Models/TodoContext.cs | 4 +- .../samples/9.0/TodoApi/Models/TodoItem.cs | 4 +- .../samples/9.0/TodoApi/Program.cs | 54 ++++- .../samples/9.0/TodoApi/TodoApi.csproj | 14 +- .../samples/9.0/TodoApi/WeatherForecast.cs | 2 +- .../Controllers/TodoItemsController.cs | 198 +++++++++--------- .../Controllers/WeatherForecastController.cs | 6 +- .../9.0/TodoApiDTO/Models/TodoContext.cs | 4 +- .../samples/9.0/TodoApiDTO/Models/TodoItem.cs | 2 +- .../9.0/TodoApiDTO/Models/TodoItemDTO.cs | 4 +- .../samples/9.0/TodoApiDTO/Program.cs | 54 ++++- .../samples/9.0/TodoApiDTO/TodoApi.csproj | 20 ++ .../samples/9.0/TodoApiDTO/WeatherForecast.cs | 2 +- 16 files changed, 319 insertions(+), 156 deletions(-) create mode 100644 aspnetcore/tutorials/first-web-api/_static/9/post.png create mode 100644 aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/TodoApi.csproj diff --git a/aspnetcore/tutorials/first-web-api.md b/aspnetcore/tutorials/first-web-api.md index db4401248098..d587b90898fc 100644 --- a/aspnetcore/tutorials/first-web-api.md +++ b/aspnetcore/tutorials/first-web-api.md @@ -4,7 +4,7 @@ author: wadepickett description: Learn how to build a web API with ASP.NET Core. ms.author: wpickett ms.custom: mvc, engagement-fy24 -ms.date: 08/04/2024 +ms.date: 02/13/2025 uid: tutorials/first-web-api --- @@ -38,15 +38,15 @@ The following diagram shows the design of the app. # [Visual Studio](#tab/visual-studio) -[!INCLUDE[](~/includes/net-prereqs-vs-8.0.md)] +[!INCLUDE[](~/includes/net-prereqs-vs-9.0.md)] # [Visual Studio Code](#tab/visual-studio-code) -[!INCLUDE[](~/includes/net-prereqs-vsc-8.0.md)] +[!INCLUDE[](~/includes/net-prereqs-vsc-9.0.md)] --- -## Create a web project +## Create a Web API project # [Visual Studio](#tab/visual-studio) @@ -55,19 +55,25 @@ The following diagram shows the design of the app. * Select the **ASP.NET Core Web API** template and select **Next**. * In the **Configure your new project dialog**, name the project *TodoApi* and select **Next**. * In the **Additional information** dialog: - * Confirm the **Framework** is **.NET 8.0 (Long Term Support)**. - * Confirm the checkbox for **Use controllers(uncheck to use minimal APIs)** is checked. + * Confirm the **Framework** is **.NET 9.0 (Standard Term Support)**. * Confirm the checkbox for **Enable OpenAPI support** is checked. + * Confirm the checkbox for **Use controllers** is checked. * Select **Create**. -## Add a NuGet package +## Add NuGet packages -A NuGet package must be added to support the database used in this tutorial. +This tutorial uses the following additional NuGet packages: + * `Microsoft.EntityFrameworkCore.InMemory`: Enables Entity Framework Core to work with an in-memory database rather than an external one, simplifying this tutorial. + * `Swashbuckle.AspNetCore.SwaggerUI`: Provides a user interface for exploring and testing API endpoints interactively through Swagger. + +Add the following NuGet packages used in this tutorial. * From the **Tools** menu, select **NuGet Package Manager > Manage NuGet Packages for Solution**. * Select the **Browse** tab. * Enter **Microsoft.EntityFrameworkCore.InMemory** in the search box, and then select `Microsoft.EntityFrameworkCore.InMemory`. * Select the **Project** checkbox in the right pane and then select **Install**. +* Enter **Swashbuckle.AspNetCore.SwaggerUI** in the search box, and then select `Swashbuckle.AspNetCore.SwaggerUI`. +* Select the **Project** checkbox in the right pane and then select **Install**. # [Visual Studio Code](#tab/visual-studio-code) @@ -79,13 +85,16 @@ A NuGet package must be added to support the database used in this tutorial. dotnet new webapi --use-controllers -o TodoApi cd TodoApi dotnet add package Microsoft.EntityFrameworkCore.InMemory + dotnet add package Swashbuckle.AspNetCore.SwaggerUI code -r ../TodoApi ``` These commands: * Create a new web API project and open it in Visual Studio Code. - * Add a NuGet package that is needed for the next section. + * Adds NuGet packages that are used in this tutorial: + * `Microsoft.EntityFrameworkCore.InMemory`: Enables Entity Framework Core to work with an in-memory database so a real database won't be required for this tutorial. + * `Swashbuckle.AspNetCore.SwaggerUI`: Provides a user interface for exploring and testing API endpoints interactively through Swagger. * Open the *TodoApi* folder in the current instance of Visual Studio Code. [!INCLUDE[](~/includes/vscode-trust-authors-add-assets.md)] @@ -94,9 +103,27 @@ A NuGet package must be added to support the database used in this tutorial. [!INCLUDE[](~/includes/package-reference.md)] -### Test the project +### Test the Project + +The project template: + +* Creates a `WeatherForecast` API using controllers. +* Adds the `Microsoft.AspNetCore.OpenApi` package for OpenAPI support as a reference in the project file **TodoApi.csproj**. +* Adds OpenAPI services in **Project.cs** to automatically generate OpenAPI JSON documentation for the `WeatherForecast` API. + +You can access the OpenAPI JSON documentation for the `WeatherForecast` API while the project is running by navigating your browser to `https://localhost:/openapi/v1.json`, where `` is a randomly chosen port number set during project creation. -The project template creates a `WeatherForecast` API with support for [Swagger](xref:tutorials/web-api-help-pages-using-swagger). +#### Configure the Swagger UI endpoint for the OpenAPI documentation + +To configure [Swagger](xref:tutorials/web-api-help-pages-using-swagger) UI for testing the API, add the following highlighted code to the `Program.cs` file in the **TodoAPI** project: + +[!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApi/Program.cs?name=snippet_First_Add_SwaggerUI&highlight=16-19)] + +The previously highlighted code: + +* Adds the Swagger UI as a service to the app with `app.UseSwaggerUI()`. +* Sets the `SwaggerEndpoint()` option to the location of the OpenAPI documentation for this project. +* Ensures the Swagger UI is only available in the app development environment to limit information disclosure and security vulnerability. # [Visual Studio](#tab/visual-studio) @@ -104,7 +131,12 @@ Press Ctrl+F5 to run without the debugger. [!INCLUDE[](~/includes/trustCertVS.md)] -Visual Studio launches the default browser and navigates to `https://localhost:/swagger/index.html`, where `` is a randomly chosen port number set at the project creation. + Visual Studio output pane shows messages similar to the following, indicating that the app is running and awaiting requests: + + ```output + Microsoft.Hosting.Lifetime: Information: Now listening on: https://localhost:{port number} + Microsoft.Hosting.Lifetime: Information: Now listening on: http://localhost:5071{port number} + ``` # [Visual Studio Code](#tab/visual-studio-code) @@ -123,19 +155,25 @@ Run the app: ```output ... info: Microsoft.Hosting.Lifetime[14] - Now listening on: https://localhost:{port} + Now listening on: https://localhost:{port number} ... ``` * Ctrl+*click* the HTTPS URL in the output to test the web app in a browser. -* The default browser is launched to `https://localhost:/swagger/index.html`, where `` is the randomly chosen port number displayed in the output. There's no endpoint at `https://localhost:`, so the browser returns [HTTP 404 Not Found](https://developer.mozilla.org/docs/Web/HTTP/Status/404). Append `/swagger` to the URL, `https://localhost:/swagger`. - After testing the web app in the following instruction, press Ctrl+C in the integrated terminal to shut it down. --- -The Swagger page `/swagger/index.html` is displayed. Select **GET** > **Try it out** > **Execute**. The page displays: +#### View the Swagger UI + +* Navigate a browser to `https://localhost:/swagger/index.html`, where `` is a randomly chosen port number set in **Properties/launchSettings.json** and displayed in the output. + +The Swagger page `/swagger/index.html` is displayed. + +* Select **GET** > **Try it out** > **Execute**. + +The page displays: * The [Curl](https://curl.haxx.se/) command to test the WeatherForecast API. * The URL to test the WeatherForecast API. @@ -144,8 +182,6 @@ The Swagger page `/swagger/index.html` is displayed. Select **GET** > **Try it o If the Swagger page doesn't appear, see [this GitHub issue](https://github.com/dotnet/AspNetCore.Docs/issues/21647). -Swagger is used to generate useful documentation and help pages for web APIs. This tutorial uses Swagger to test the app. For more information on Swagger, see . - Copy and paste the **Request URL** in the browser: `https://localhost:/weatherforecast` JSON similar to the following example is returned: @@ -232,13 +268,13 @@ In ASP.NET Core, services such as the DB context must be registered with the [de Update `Program.cs` with the following highlighted code: -[!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApi/Program.cs?highlight=1-2,7-8)] +[!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApi/Program.cs?nameFinal_Add_DBContext=&highlight=1-2,9-10)] The preceding code: * Adds `using` directives. * Adds the database context to the DI container. -* Specifies that the database context will use an in-memory database. +* Specifies that the database context uses an in-memory database. ## Scaffold a controller @@ -312,7 +348,7 @@ When the `[action]` token isn't in the route template, the [action](xref:mvc/con ## Update the PostTodoItem create method -Update the return statement in the `PostTodoItem` to use the [nameof](/dotnet/csharp/language-reference/operators/nameof) operator: +In **Controllers/TodoItemsController.cs** update the return statement in the `PostTodoItem` to use the [nameof](/dotnet/csharp/language-reference/operators/nameof) operator: [!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApi/Controllers/TodoItemsController.cs?name=snippet_Create)] @@ -343,7 +379,7 @@ The method: * Select **Execute** - ![Swagger POST](~/tutorials/first-web-api/_static/7/post.png) + ![Swagger POST](~/tutorials/first-web-api/_static/9/post.png) ### Test the location header URI @@ -375,10 +411,11 @@ The [`[HttpGet]`](xref:Microsoft.AspNetCore.Mvc.HttpGetAttribute) attribute deno * Start with the template string in the controller's `Route` attribute: - [!code-csharp[](~/tutorials/first-web-api/samples/6.0/TodoApi/Controllers/TodoItemsController.cs?name=snippet_Route&highlight=1)] + [!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApi/Controllers/TodoItemsController.cs?name=snippet_Route&highlight=1)] * Replace `[controller]` with the name of the controller, which by convention is the controller class name minus the "Controller" suffix. For this sample, the controller class name is **TodoItems**Controller, so the controller name is "TodoItems". ASP.NET Core [routing](xref:mvc/controllers/routing) is case insensitive. -* If the `[HttpGet]` attribute has a route template (for example, `[HttpGet("products")]`), append that to the path. This sample doesn't use a template. For more information, see [Attribute routing with Http[Verb] attributes](xref:mvc/controllers/routing#verb). + +This sample doesn't use a route template with the [HttpGet] attribute. However in applications where an `[HttpGet]` attribute has a route template (for example, `[HttpGet("products")]`), append that to the path. For more information, see [Attribute routing with Http[Verb] attributes](xref:mvc/controllers/routing#verb). In the following `GetTodoItem` method, `"{id}"` is a placeholder variable for the unique identifier of the to-do item. When `GetTodoItem` is invoked, the value of `"{id}"` in the URL is provided to the method in its `id` parameter. @@ -397,7 +434,7 @@ The return type of the `GetTodoItems` and `GetTodoItem` methods is [ActionResult Examine the `PutTodoItem` method: -[!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApi/Controllers/TodoItemsController.cs?name=snippet_Update)] +[!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApi/Controllers/TodoItemsController.cs?name=snippet_PutTodoItem)] `PutTodoItem` is similar to `PostTodoItem`, except it uses `HTTP PUT`. The response is [204 (No Content)](https://www.rfc-editor.org/rfc/rfc9110#status.204). According to the HTTP specification, a `PUT` request requires the client to send the entire updated entity, not just the changes. To support partial updates, use [HTTP PATCH](xref:Microsoft.AspNetCore.Mvc.HttpPatchAttribute). @@ -447,19 +484,19 @@ A DTO may be used to: To demonstrate the DTO approach, update the `TodoItem` class to include a secret field: -[!code-csharp[](~/tutorials/first-web-api/samples/6.0/TodoApiDTO/Models/TodoItem.cs?highlight=8)] +[!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApiDTO/Models/TodoItem.cs?highlight=8)] The secret field needs to be hidden from this app, but an administrative app could choose to expose it. Verify you can post and get the secret field. -Create a DTO model: +Create a DTO model in a **Models/TodoItemsDTO.cs** file: [!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApiDTO/Models/TodoItemDTO.cs)] Update the `TodoItemsController` to use `TodoItemDTO`: -[!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApiDTO/Controllers/TodoItemsController.cs)] +[!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApiDTO/Controllers/TodoItemsController.cs?highlight=25,28,34,43,49,51,62,63,89,93,94,100,124-130)] Verify you can't post or get the secret field. @@ -491,6 +528,7 @@ For more information, see the following resources: * * +( * * * diff --git a/aspnetcore/tutorials/first-web-api/_static/9/post.png b/aspnetcore/tutorials/first-web-api/_static/9/post.png new file mode 100644 index 0000000000000000000000000000000000000000..c141ae4f21742e0c1ad277d1b3c39ceea1b069b9 GIT binary patch literal 147018 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 Kl%2%4FWE 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 a+xq{x#bqySDt-b00000 [Route("api/[controller]")] [ApiController] public class TodoItemsController : ControllerBase + // { private readonly TodoContext _context; @@ -40,7 +47,7 @@ public async Task> GetTodoItem(long id) // PUT: api/TodoItems/5 // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 - // + // [HttpPut("{id}")] public async Task PutTodoItem(long id, TodoItem todoItem) { @@ -69,7 +76,7 @@ public async Task PutTodoItem(long id, TodoItem todoItem) return NoContent(); } - // + // // POST: api/TodoItems // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 @@ -86,6 +93,7 @@ public async Task> PostTodoItem(TodoItem todoItem) // // DELETE: api/TodoItems/5 + // [HttpDelete("{id}")] public async Task DeleteTodoItem(long id) { @@ -100,6 +108,7 @@ public async Task DeleteTodoItem(long id) return NoContent(); } + // private bool TodoItemExists(long id) { diff --git a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApi/Models/TodoContext.cs b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApi/Models/TodoContext.cs index 9ec9f6dbe6ca..ca83dd27b000 100644 --- a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApi/Models/TodoContext.cs +++ b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApi/Models/TodoContext.cs @@ -1,4 +1,4 @@ -using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; namespace TodoApi.Models; @@ -10,4 +10,4 @@ public TodoContext(DbContextOptions options) } public DbSet TodoItems { get; set; } = null!; -} +} \ No newline at end of file diff --git a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApi/Models/TodoItem.cs b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApi/Models/TodoItem.cs index 6aa52880ee66..b0d8cb2f9d41 100644 --- a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApi/Models/TodoItem.cs +++ b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApi/Models/TodoItem.cs @@ -1,8 +1,8 @@ -namespace TodoApi.Models; +namespace TodoApi.Models; public class TodoItem { public long Id { get; set; } public string? Name { get; set; } public bool IsComplete { get; set; } -} +} \ No newline at end of file diff --git a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApi/Program.cs b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApi/Program.cs index 1fff89e0f7fd..e837f2bf4e37 100644 --- a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApi/Program.cs +++ b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApi/Program.cs @@ -1,20 +1,64 @@ +#define Final_Add_DBContext // First_Add_SwaggerUI +#if First_Add_SwaggerUI +// +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. + +builder.Services.AddControllers(); +// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi +builder.Services.AddOpenApi(); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.MapOpenApi(); + + app.UseSwaggerUI(options => + { + options.SwaggerEndpoint("/openapi/v1.json", "v1"); + }); +} + +app.UseHttpsRedirection(); + +app.UseAuthorization(); + +app.MapControllers(); + +app.Run(); +// +#endif + +#if Final_Add_DBContext +// using Microsoft.EntityFrameworkCore; using TodoApi.Models; var builder = WebApplication.CreateBuilder(args); +// Add services to the container. + builder.Services.AddControllers(); builder.Services.AddDbContext(opt => opt.UseInMemoryDatabase("TodoList")); -builder.Services.AddEndpointsApiExplorer(); -builder.Services.AddSwaggerGen(); + +// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi +builder.Services.AddOpenApi(); var app = builder.Build(); +// Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { - app.UseSwagger(); - app.UseSwaggerUI(); + app.MapOpenApi(); + + app.UseSwaggerUI(options => + { + options.SwaggerEndpoint("/openapi/v1.json", "v1"); + }); } app.UseHttpsRedirection(); @@ -24,3 +68,5 @@ app.MapControllers(); app.Run(); +// +#endif diff --git a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApi/TodoApi.csproj b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApi/TodoApi.csproj index 910a83962ccc..9fa6acaede07 100644 --- a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApi/TodoApi.csproj +++ b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApi/TodoApi.csproj @@ -1,22 +1,20 @@  - net7.0 + net9.0 enable enable - - - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApi/WeatherForecast.cs b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApi/WeatherForecast.cs index 3053f366c4d3..b6eef3eb8911 100644 --- a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApi/WeatherForecast.cs +++ b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApi/WeatherForecast.cs @@ -10,4 +10,4 @@ public class WeatherForecast public string? Summary { get; set; } } -} \ No newline at end of file +} diff --git a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Controllers/TodoItemsController.cs b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Controllers/TodoItemsController.cs index e5eec163d94f..a37b777338d8 100644 --- a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Controllers/TodoItemsController.cs +++ b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Controllers/TodoItemsController.cs @@ -1,126 +1,132 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using TodoApi.Models; -namespace TodoApi.Controllers; - -[Route("api/[controller]")] -[ApiController] -public class TodoItemsController : ControllerBase +namespace TodoApi.Controllers { - private readonly TodoContext _context; - - public TodoItemsController(TodoContext context) - { - _context = context; - } - - // GET: api/TodoItems - [HttpGet] - public async Task>> GetTodoItems() - { - return await _context.TodoItems - .Select(x => ItemToDTO(x)) - .ToListAsync(); - } - - // GET: api/TodoItems/5 - // - [HttpGet("{id}")] - public async Task> GetTodoItem(long id) + [Route("api/[controller]")] + [ApiController] + public class TodoItemsController : ControllerBase { - var todoItem = await _context.TodoItems.FindAsync(id); + private readonly TodoContext _context; - if (todoItem == null) + public TodoItemsController(TodoContext context) { - return NotFound(); + _context = context; } - return ItemToDTO(todoItem); - } - // - - // PUT: api/TodoItems/5 - // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 - // - [HttpPut("{id}")] - public async Task PutTodoItem(long id, TodoItemDTO todoDTO) - { - if (id != todoDTO.Id) + // GET: api/TodoItems + [HttpGet] + public async Task>> GetTodoItems() { - return BadRequest(); + return await _context.TodoItems + .Select(x => ItemToDTO(x)) + .ToListAsync(); } - var todoItem = await _context.TodoItems.FindAsync(id); - if (todoItem == null) + // GET: api/TodoItems/5 + [HttpGet("{id}")] + public async Task> GetTodoItem(long id) { - return NotFound(); - } + var todoItem = await _context.TodoItems.FindAsync(id); - todoItem.Name = todoDTO.Name; - todoItem.IsComplete = todoDTO.IsComplete; + if (todoItem == null) + { + return NotFound(); + } - try - { - await _context.SaveChangesAsync(); + return ItemToDTO(todoItem); } - catch (DbUpdateConcurrencyException) when (!TodoItemExists(id)) + + // PUT: api/TodoItems/5 + // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 + [HttpPut("{id}")] + public async Task PutTodoItem(long id, TodoItemDTO todoItemDTO) { - return NotFound(); + if (id != todoItemDTO.Id) + { + return BadRequest(); + } + + var todoItem = await _context.TodoItems.FindAsync(id); + if (todoItem == null) + { + return NotFound(); + } + + todoItem.Name = todoItemDTO.Name; + todoItem.IsComplete = todoItemDTO.IsComplete; + + _context.Entry(todoItem).State = EntityState.Modified; + + try + { + await _context.SaveChangesAsync(); + } + catch (DbUpdateConcurrencyException) + { + if (!TodoItemExists(id)) + { + return NotFound(); + } + else + { + throw; + } + } + + return NoContent(); } - return NoContent(); - } - // - - // POST: api/TodoItems - // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 - // - [HttpPost] - public async Task> PostTodoItem(TodoItemDTO todoDTO) - { - var todoItem = new TodoItem + // POST: api/TodoItems + // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 + [HttpPost] + public async Task> PostTodoItem(TodoItemDTO todoItemDTO) { - IsComplete = todoDTO.IsComplete, - Name = todoDTO.Name - }; + var todoItem = new TodoItem + { + Name = todoItemDTO.Name, + IsComplete = todoItemDTO.IsComplete + }; - _context.TodoItems.Add(todoItem); - await _context.SaveChangesAsync(); + _context.TodoItems.Add(todoItem); + await _context.SaveChangesAsync(); - return CreatedAtAction( - nameof(GetTodoItem), - new { id = todoItem.Id }, - ItemToDTO(todoItem)); - } - // + return CreatedAtAction(nameof(GetTodoItem), new { id = todoItem.Id }, ItemToDTO(todoItem)); + } - // DELETE: api/TodoItems/5 - [HttpDelete("{id}")] - public async Task DeleteTodoItem(long id) - { - var todoItem = await _context.TodoItems.FindAsync(id); - if (todoItem == null) + // DELETE: api/TodoItems/5 + [HttpDelete("{id}")] + public async Task DeleteTodoItem(long id) { - return NotFound(); - } + var todoItem = await _context.TodoItems.FindAsync(id); + if (todoItem == null) + { + return NotFound(); + } - _context.TodoItems.Remove(todoItem); - await _context.SaveChangesAsync(); + _context.TodoItems.Remove(todoItem); + await _context.SaveChangesAsync(); - return NoContent(); - } + return NoContent(); + } - private bool TodoItemExists(long id) - { - return _context.TodoItems.Any(e => e.Id == id); - } + private bool TodoItemExists(long id) + { + return _context.TodoItems.Any(e => e.Id == id); + } - private static TodoItemDTO ItemToDTO(TodoItem todoItem) => - new TodoItemDTO - { - Id = todoItem.Id, - Name = todoItem.Name, - IsComplete = todoItem.IsComplete - }; + private static TodoItemDTO ItemToDTO(TodoItem todoItem) => + new TodoItemDTO + { + Id = todoItem.Id, + Name = todoItem.Name, + IsComplete = todoItem.IsComplete + }; + } } diff --git a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Controllers/WeatherForecastController.cs b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Controllers/WeatherForecastController.cs index aacc848b90fd..de25d795aa96 100644 --- a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Controllers/WeatherForecastController.cs +++ b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Controllers/WeatherForecastController.cs @@ -8,8 +8,8 @@ public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" - }; + "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" + }; private readonly ILogger _logger; @@ -30,4 +30,4 @@ public IEnumerable Get() .ToArray(); } } -} \ No newline at end of file +} diff --git a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Models/TodoContext.cs b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Models/TodoContext.cs index 9ec9f6dbe6ca..ca83dd27b000 100644 --- a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Models/TodoContext.cs +++ b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Models/TodoContext.cs @@ -1,4 +1,4 @@ -using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; namespace TodoApi.Models; @@ -10,4 +10,4 @@ public TodoContext(DbContextOptions options) } public DbSet TodoItems { get; set; } = null!; -} +} \ No newline at end of file diff --git a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Models/TodoItem.cs b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Models/TodoItem.cs index 329540542975..99d34ed6e30b 100644 --- a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Models/TodoItem.cs +++ b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Models/TodoItem.cs @@ -1,4 +1,4 @@ -namespace TodoApi.Models; +namespace TodoApi.Models; public class TodoItem { diff --git a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Models/TodoItemDTO.cs b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Models/TodoItemDTO.cs index 22793811581a..1a1f39b370db 100644 --- a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Models/TodoItemDTO.cs +++ b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Models/TodoItemDTO.cs @@ -1,8 +1,8 @@ -namespace TodoApi.Models; +namespace TodoApi.Models; public class TodoItemDTO { public long Id { get; set; } public string? Name { get; set; } public bool IsComplete { get; set; } -} +} \ No newline at end of file diff --git a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Program.cs b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Program.cs index 1fff89e0f7fd..6b5732e05007 100644 --- a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Program.cs +++ b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/Program.cs @@ -1,20 +1,64 @@ +#define Final_Add_DBContext // First_Add_SwaggerUI || Final_Add_DBContext +#if First_Add_SwaggerUI +// +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. + +builder.Services.AddControllers(); +// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi +builder.Services.AddOpenApi(); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.MapOpenApi(); + + app.UseSwaggerUI(options => + { + options.SwaggerEndpoint("/openapi/v1.json", "v1"); + }); +} + +app.UseHttpsRedirection(); + +app.UseAuthorization(); + +app.MapControllers(); + +app.Run(); +// +#endif + +#if Final_Add_DBContext +// using Microsoft.EntityFrameworkCore; using TodoApi.Models; var builder = WebApplication.CreateBuilder(args); +// Add services to the container. + builder.Services.AddControllers(); builder.Services.AddDbContext(opt => opt.UseInMemoryDatabase("TodoList")); -builder.Services.AddEndpointsApiExplorer(); -builder.Services.AddSwaggerGen(); + +// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi +builder.Services.AddOpenApi(); var app = builder.Build(); +// Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { - app.UseSwagger(); - app.UseSwaggerUI(); + app.MapOpenApi(); + + app.UseSwaggerUI(options => + { + options.SwaggerEndpoint("/openapi/v1.json", "v1"); + }); } app.UseHttpsRedirection(); @@ -24,3 +68,5 @@ app.MapControllers(); app.Run(); +// +#endif diff --git a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/TodoApi.csproj b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/TodoApi.csproj new file mode 100644 index 000000000000..9fa6acaede07 --- /dev/null +++ b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/TodoApi.csproj @@ -0,0 +1,20 @@ + + + + net9.0 + enable + enable + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + diff --git a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/WeatherForecast.cs b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/WeatherForecast.cs index 3053f366c4d3..b6eef3eb8911 100644 --- a/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/WeatherForecast.cs +++ b/aspnetcore/tutorials/first-web-api/samples/9.0/TodoApiDTO/WeatherForecast.cs @@ -10,4 +10,4 @@ public class WeatherForecast public string? Summary { get; set; } } -} \ No newline at end of file +} From 26ebc0bbe1491d93aa7241db0e259694fb45fe10 Mon Sep 17 00:00:00 2001 From: Cam Soper Date: Fri, 14 Feb 2025 13:54:19 -0600 Subject: [PATCH 03/22] Update first-web-api.md --- aspnetcore/tutorials/first-web-api.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/aspnetcore/tutorials/first-web-api.md b/aspnetcore/tutorials/first-web-api.md index eeec38e8fbaf..f3238e311f74 100644 --- a/aspnetcore/tutorials/first-web-api.md +++ b/aspnetcore/tutorials/first-web-api.md @@ -125,6 +125,7 @@ The previously highlighted code: * Sets the `SwaggerEndpoint()` option to the location of the OpenAPI documentation for this project. * Ensures the Swagger UI is only available in the app development environment to limit information disclosure and security vulnerability. +```csharp var app = builder.Build(); // Configure the HTTP request pipeline. @@ -562,4 +563,4 @@ For more information, see the following resources: [!INCLUDE[](~/tutorials/first-web-api/includes/first-web-api7.md)] -[!INCLUDE[](~/tutorials/first-web-api/includes/first-web-api8.md)] \ No newline at end of file +[!INCLUDE[](~/tutorials/first-web-api/includes/first-web-api8.md)] From 7259e7237ef59b5b94e1b97e3281b0ac635fda1f Mon Sep 17 00:00:00 2001 From: Wade Pickett Date: Fri, 14 Feb 2025 14:21:23 -0800 Subject: [PATCH 04/22] Remove redundant code snippet from tutorial A corrected code snippet is now pulled in above this from a full app sample. --- aspnetcore/tutorials/first-web-api.md | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/aspnetcore/tutorials/first-web-api.md b/aspnetcore/tutorials/first-web-api.md index f3238e311f74..9bc8c0d52c81 100644 --- a/aspnetcore/tutorials/first-web-api.md +++ b/aspnetcore/tutorials/first-web-api.md @@ -125,28 +125,6 @@ The previously highlighted code: * Sets the `SwaggerEndpoint()` option to the location of the OpenAPI documentation for this project. * Ensures the Swagger UI is only available in the app development environment to limit information disclosure and security vulnerability. -```csharp -var app = builder.Build(); - -// Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) -{ - // Add SwaggerUI - app.UseSwaggerUI(options => - // Add SwaggerEndpoint - options.SwaggerEndpoint("/openapi/v1.json", "v1") - ); - app.MapOpenApi(); -} - -app.UseHttpsRedirection(); - -app.UseAuthorization(); - -app.MapControllers(); - -app.Run(); -``` # [Visual Studio](#tab/visual-studio) Press Ctrl+F5 to run without the debugger. From 62c3551a53c19b4d573931b0a1148ba655cf28c4 Mon Sep 17 00:00:00 2001 From: Wade Pickett Date: Fri, 14 Feb 2025 14:35:02 -0800 Subject: [PATCH 05/22] Fix code snippet reference in tutorial --- aspnetcore/tutorials/first-web-api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aspnetcore/tutorials/first-web-api.md b/aspnetcore/tutorials/first-web-api.md index 9bc8c0d52c81..9179291a7a97 100644 --- a/aspnetcore/tutorials/first-web-api.md +++ b/aspnetcore/tutorials/first-web-api.md @@ -268,7 +268,7 @@ In ASP.NET Core, services such as the DB context must be registered with the [de Update `Program.cs` with the following highlighted code: -[!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApi/Program.cs?nameFinal_Add_DBContext=&highlight=1-2,9-10)] +[!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApi/Program.cs?name=snippet_Final_Add_DBContext=&highlight=1-2,9-10)] The preceding code: From cde49deac773d618074f6697e7f6eb6f90b7298d Mon Sep 17 00:00:00 2001 From: Wade Pickett Date: Fri, 14 Feb 2025 15:00:51 -0800 Subject: [PATCH 06/22] Fix code snippet link in tutorial: removed typo --- aspnetcore/tutorials/first-web-api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aspnetcore/tutorials/first-web-api.md b/aspnetcore/tutorials/first-web-api.md index 9179291a7a97..5385ba7bb7af 100644 --- a/aspnetcore/tutorials/first-web-api.md +++ b/aspnetcore/tutorials/first-web-api.md @@ -268,7 +268,7 @@ In ASP.NET Core, services such as the DB context must be registered with the [de Update `Program.cs` with the following highlighted code: -[!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApi/Program.cs?name=snippet_Final_Add_DBContext=&highlight=1-2,9-10)] +[!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApi/Program.cs?name=snippet_Final_Add_DBContext&highlight=1-2,9-10)] The preceding code: From ab04928a855d34440827130e739eb6df13463bdd Mon Sep 17 00:00:00 2001 From: Wade Pickett Date: Fri, 14 Feb 2025 16:00:43 -0800 Subject: [PATCH 07/22] Add bullet points to action instructions in tutorial --- aspnetcore/tutorials/first-web-api.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/aspnetcore/tutorials/first-web-api.md b/aspnetcore/tutorials/first-web-api.md index 5385ba7bb7af..9016acf4bc4d 100644 --- a/aspnetcore/tutorials/first-web-api.md +++ b/aspnetcore/tutorials/first-web-api.md @@ -266,9 +266,9 @@ The *database context* is the main class that coordinates Entity Framework funct In ASP.NET Core, services such as the DB context must be registered with the [dependency injection (DI)](xref:fundamentals/dependency-injection) container. The container provides the service to controllers. -Update `Program.cs` with the following highlighted code: +* Update `Program.cs` with the following highlighted code: -[!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApi/Program.cs?name=snippet_Final_Add_DBContext&highlight=1-2,9-10)] + [!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApi/Program.cs?name=snippet_Final_Add_DBContext&highlight=1-2,9-10)] The preceding code: @@ -322,9 +322,9 @@ source ~/.bashrc [!INCLUDE[](~/includes/dotnet-tool-install-arch-options.md)] -Build the project. +* Build the project. -Run the following command: +* Run the following command: ```dotnetcli dotnet aspnet-codegenerator controller -name TodoItemsController -async -api -m TodoItem -dc TodoContext -outDir Controllers @@ -348,9 +348,9 @@ When the `[action]` token isn't in the route template, the [action](xref:mvc/con ## Update the PostTodoItem create method -In **Controllers/TodoItemsController.cs** update the return statement in the `PostTodoItem` to use the [nameof](/dotnet/csharp/language-reference/operators/nameof) operator: +* In **Controllers/TodoItemsController.cs** update the return statement in the `PostTodoItem` to use the [nameof](/dotnet/csharp/language-reference/operators/nameof) operator: -[!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApi/Controllers/TodoItemsController.cs?name=snippet_Create)] + [!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApi/Controllers/TodoItemsController.cs?name=snippet_Create)] The preceding code is an `HTTP POST` method, as indicated by the [`[HttpPost]`](xref:Microsoft.AspNetCore.Mvc.HttpPostAttribute) attribute. The method gets the value of the `TodoItem` from the body of the HTTP request. @@ -401,7 +401,7 @@ Two GET endpoints are implemented: The previous section showed an example of the `/api/todoitems/{id}` route. -Follow the [POST](#post7) instructions to add another todo item, and then test the `/api/todoitems` route using Swagger. +* Follow the [POST](#post7) instructions to add another todo item, and then test the `/api/todoitems` route using Swagger. This app uses an in-memory database. If the app is stopped and started, the preceding GET request doesn't return any data. If no data is returned, [POST](#post7) data to the app. @@ -442,7 +442,7 @@ Examine the `PutTodoItem` method: This sample uses an in-memory database that must be initialized each time the app is started. There must be an item in the database before you make a PUT call. Call GET to ensure there's an item in the database before making a PUT call. -Using the Swagger UI, use the PUT button to update the `TodoItem` that has Id = 1 and set its name to `"feed fish"`. Note the response is [`HTTP 204 No Content`](https://developer.mozilla.org/docs/Web/HTTP/Status/204). +* Using the Swagger UI, use the PUT button to update the `TodoItem` that has Id = 1 and set its name to `"feed fish"`. Note the response is [`HTTP 204 No Content`](https://developer.mozilla.org/docs/Web/HTTP/Status/204). ## The DeleteTodoItem method @@ -452,7 +452,7 @@ Examine the `DeleteTodoItem` method: ### Test the DeleteTodoItem method -Use the Swagger UI to delete the `TodoItem` that has Id = 1. Note the response is [`HTTP 204 No Content`](https://developer.mozilla.org/docs/Web/HTTP/Status/204). +* Use the Swagger UI to delete the `TodoItem` that has Id = 1. Note the response is [`HTTP 204 No Content`](https://developer.mozilla.org/docs/Web/HTTP/Status/204). ## Test with other tools @@ -482,7 +482,7 @@ A DTO may be used to: * Omit some properties in order to reduce payload size. * Flatten object graphs that contain nested objects. Flattened object graphs can be more convenient for clients. -To demonstrate the DTO approach, update the `TodoItem` class to include a secret field: +* To demonstrate the DTO approach, update the `TodoItem` class to include a secret field: [!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApiDTO/Models/TodoItem.cs?highlight=8)] @@ -494,9 +494,9 @@ Create a DTO model in a **Models/TodoItemsDTO.cs** file: [!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApiDTO/Models/TodoItemDTO.cs)] -Update the `TodoItemsController` to use `TodoItemDTO`: +* Update the `TodoItemsController` to use `TodoItemDTO`: -[!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApiDTO/Controllers/TodoItemsController.cs?highlight=25,28,34,43,49,51,62,63,89,93,94,100,124-130)] + [!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApiDTO/Controllers/TodoItemsController.cs?highlight=25,28,34,43,49,51,62,63,89,93,94,100,124-130)] Verify you can't post or get the secret field. From 548452297339ecb4c66690817b9cd97906fcc0c6 Mon Sep 17 00:00:00 2001 From: Wade Pickett Date: Sat, 15 Feb 2025 10:33:33 -0800 Subject: [PATCH 08/22] Apply suggestions from code review Add tdykstra review commits Co-authored-by: Tom Dykstra --- aspnetcore/tutorials/first-web-api.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/aspnetcore/tutorials/first-web-api.md b/aspnetcore/tutorials/first-web-api.md index 9016acf4bc4d..73b6f8da0d6e 100644 --- a/aspnetcore/tutorials/first-web-api.md +++ b/aspnetcore/tutorials/first-web-api.md @@ -109,7 +109,7 @@ The project template: * Creates a `WeatherForecast` API using controllers. * Adds the `Microsoft.AspNetCore.OpenApi` package for OpenAPI support as a reference in the project file **TodoApi.csproj**. -* Adds OpenAPI services in **Project.cs** to automatically generate OpenAPI JSON documentation for the `WeatherForecast` API. +* Adds OpenAPI services in **Program.cs** to automatically generate OpenAPI JSON documentation for the `WeatherForecast` API. You can access the OpenAPI JSON documentation for the `WeatherForecast` API while the project is running by navigating your browser to `https://localhost:/openapi/v1.json`, where `` is a randomly chosen port number set during project creation. @@ -119,7 +119,7 @@ To configure [Swagger](xref:tutorials/web-api-help-pages-using-swagger) UI for t [!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApi/Program.cs?name=snippet_First_Add_SwaggerUI&highlight=16-19)] -The previously highlighted code: +The preceding highlighted code: * Adds the Swagger UI as a service to the app with `app.UseSwaggerUI()`. * Sets the `SwaggerEndpoint()` option to the location of the OpenAPI documentation for this project. @@ -167,7 +167,7 @@ After testing the web app in the following instruction, press Ctrl+/swagger/index.html`, where `` is a randomly chosen port number set in **Properties/launchSettings.json** and displayed in the output. +* Navigate a browser to `https://localhost:/swagger/index.html`, where `` is the randomly chosen port number set in **Properties/launchSettings.json** as the port for HTTPS and displayed in the "Now listening" messages. The Swagger page `/swagger/index.html` is displayed. @@ -182,7 +182,7 @@ The page displays: If the Swagger page doesn't appear, see [this GitHub issue](https://github.com/dotnet/AspNetCore.Docs/issues/21647). -Copy and paste the **Request URL** in the browser: `https://localhost:/weatherforecast` +Copy and paste the **Request URL** to the browser: `https://localhost:/weatherforecast` JSON similar to the following example is returned: From 82a57dd330060a22934724d3db907957cee111b2 Mon Sep 17 00:00:00 2001 From: Wade Pickett Date: Sat, 15 Feb 2025 11:14:51 -0800 Subject: [PATCH 09/22] Adding more of tdykstra's review suggestions --- aspnetcore/tutorials/first-web-api.md | 28 +++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/aspnetcore/tutorials/first-web-api.md b/aspnetcore/tutorials/first-web-api.md index 73b6f8da0d6e..bab7d587dd0e 100644 --- a/aspnetcore/tutorials/first-web-api.md +++ b/aspnetcore/tutorials/first-web-api.md @@ -1,14 +1,14 @@ --- -title: "Tutorial: Create a web API with ASP.NET Core" +title: "Tutorial: Create a controller-based web API with ASP.NET Core" author: wadepickett -description: Learn how to build a web API with ASP.NET Core. +description: Learn how to build a controller-based web API with ASP.NET Core. ms.author: wpickett ms.custom: mvc, engagement-fy24 ms.date: 02/13/2025 uid: tutorials/first-web-api --- -# Tutorial: Create a web API with ASP.NET Core +# Tutorial: Create a controller-based web API with ASP.NET Core [!INCLUDE[](~/includes/not-latest-version.md)] @@ -57,23 +57,23 @@ The following diagram shows the design of the app. * In the **Additional information** dialog: * Confirm the **Framework** is **.NET 9.0 (Standard Term Support)**. * Confirm the checkbox for **Enable OpenAPI support** is checked. + * Confirm the checkbox for **Do not use top-level statements** is **not** checked. * Confirm the checkbox for **Use controllers** is checked. * Select **Create**. ## Add NuGet packages This tutorial uses the following additional NuGet packages: - * `Microsoft.EntityFrameworkCore.InMemory`: Enables Entity Framework Core to work with an in-memory database rather than an external one, simplifying this tutorial. - * `Swashbuckle.AspNetCore.SwaggerUI`: Provides a user interface for exploring and testing API endpoints interactively through Swagger. - -Add the following NuGet packages used in this tutorial. - -* From the **Tools** menu, select **NuGet Package Manager > Manage NuGet Packages for Solution**. -* Select the **Browse** tab. -* Enter **Microsoft.EntityFrameworkCore.InMemory** in the search box, and then select `Microsoft.EntityFrameworkCore.InMemory`. -* Select the **Project** checkbox in the right pane and then select **Install**. -* Enter **Swashbuckle.AspNetCore.SwaggerUI** in the search box, and then select `Swashbuckle.AspNetCore.SwaggerUI`. -* Select the **Project** checkbox in the right pane and then select **Install**. + * `Microsoft.EntityFrameworkCore.InMemory`: Enables Entity Framework Core to work with an in-memory database rather than an external one, simplifying this tutorial. + * `Swashbuckle.AspNetCore.SwaggerUI`: Provides a user interface for exploring and testing API endpoints interactively through Swagger. + +* Add the following NuGet packages used in this tutorial: + * From the **Tools** menu, select **NuGet Package Manager > Manage NuGet Packages for Solution**. + * Select the **Browse** tab. + * Enter **Microsoft.EntityFrameworkCore.InMemory** in the search box, and then select `Microsoft.EntityFrameworkCore.InMemory`. + * Select the **Project** checkbox in the right pane and then select **Install**. + * Enter **Swashbuckle.AspNetCore.SwaggerUI** in the search box, and then select `Swashbuckle.AspNetCore.SwaggerUI`. + * Select the **Project** checkbox in the right pane and then select **Install**. # [Visual Studio Code](#tab/visual-studio-code) From 08f5b50720df3f5c626efa3b85af7d4f8333dbb8 Mon Sep 17 00:00:00 2001 From: Wade Pickett Date: Sat, 15 Feb 2025 11:51:16 -0800 Subject: [PATCH 10/22] Fix port number placeholder in tutorial --- aspnetcore/tutorials/first-web-api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aspnetcore/tutorials/first-web-api.md b/aspnetcore/tutorials/first-web-api.md index bab7d587dd0e..4fa1b6a6411e 100644 --- a/aspnetcore/tutorials/first-web-api.md +++ b/aspnetcore/tutorials/first-web-api.md @@ -135,7 +135,7 @@ Press Ctrl+F5 to run without the debugger. ```output Microsoft.Hosting.Lifetime: Information: Now listening on: https://localhost:{port number} - Microsoft.Hosting.Lifetime: Information: Now listening on: http://localhost:5071{port number} + Microsoft.Hosting.Lifetime: Information: Now listening on: http://localhost:{port number} ``` # [Visual Studio Code](#tab/visual-studio-code) From 5d29651a2f1f427d7c8b430e98c3dc96b67f2f3d Mon Sep 17 00:00:00 2001 From: Wade Pickett Date: Sat, 15 Feb 2025 12:02:19 -0800 Subject: [PATCH 11/22] Clarify OpenAPI and Swagger UI port details --- aspnetcore/tutorials/first-web-api.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aspnetcore/tutorials/first-web-api.md b/aspnetcore/tutorials/first-web-api.md index 4fa1b6a6411e..6f13515dbe9e 100644 --- a/aspnetcore/tutorials/first-web-api.md +++ b/aspnetcore/tutorials/first-web-api.md @@ -111,7 +111,7 @@ The project template: * Adds the `Microsoft.AspNetCore.OpenApi` package for OpenAPI support as a reference in the project file **TodoApi.csproj**. * Adds OpenAPI services in **Program.cs** to automatically generate OpenAPI JSON documentation for the `WeatherForecast` API. -You can access the OpenAPI JSON documentation for the `WeatherForecast` API while the project is running by navigating your browser to `https://localhost:/openapi/v1.json`, where `` is a randomly chosen port number set during project creation. +You can access the OpenAPI JSON documentation for the `WeatherForecast` API while the project is running by navigating your browser to `https://localhost:/openapi/v1.json`, where `` is the randomly chosen port number set in **Properties/launchSettings.json** as the port for HTTPS, and displayed in the "Now listening" output messages when the app is run. #### Configure the Swagger UI endpoint for the OpenAPI documentation @@ -167,7 +167,7 @@ After testing the web app in the following instruction, press Ctrl+/swagger/index.html`, where `` is the randomly chosen port number set in **Properties/launchSettings.json** as the port for HTTPS and displayed in the "Now listening" messages. +* Navigate a browser to `https://localhost:/swagger/index.html`, where `` is the randomly chosen port number set in **Properties/launchSettings.json** as the port for HTTPS, and displayed in the "Now listening" output messages when the app is run. The Swagger page `/swagger/index.html` is displayed. From ed21ec89e84e4dca3ee63bfd6de60040367ca4e6 Mon Sep 17 00:00:00 2001 From: Wade Pickett Date: Sat, 15 Feb 2025 12:29:10 -0800 Subject: [PATCH 12/22] Fix list: Add missing line break in tutorial --- aspnetcore/tutorials/first-web-api.md | 1 + 1 file changed, 1 insertion(+) diff --git a/aspnetcore/tutorials/first-web-api.md b/aspnetcore/tutorials/first-web-api.md index 6f13515dbe9e..28153c2caead 100644 --- a/aspnetcore/tutorials/first-web-api.md +++ b/aspnetcore/tutorials/first-web-api.md @@ -64,6 +64,7 @@ The following diagram shows the design of the app. ## Add NuGet packages This tutorial uses the following additional NuGet packages: + * `Microsoft.EntityFrameworkCore.InMemory`: Enables Entity Framework Core to work with an in-memory database rather than an external one, simplifying this tutorial. * `Swashbuckle.AspNetCore.SwaggerUI`: Provides a user interface for exploring and testing API endpoints interactively through Swagger. From d898d3ed722501c309686b554a37dfa4b9185d7c Mon Sep 17 00:00:00 2001 From: Wade Pickett Date: Sat, 15 Feb 2025 12:47:52 -0800 Subject: [PATCH 13/22] Fix list formatting in tutorial markdown --- aspnetcore/tutorials/first-web-api.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aspnetcore/tutorials/first-web-api.md b/aspnetcore/tutorials/first-web-api.md index 28153c2caead..49cbb677004e 100644 --- a/aspnetcore/tutorials/first-web-api.md +++ b/aspnetcore/tutorials/first-web-api.md @@ -65,8 +65,8 @@ The following diagram shows the design of the app. This tutorial uses the following additional NuGet packages: - * `Microsoft.EntityFrameworkCore.InMemory`: Enables Entity Framework Core to work with an in-memory database rather than an external one, simplifying this tutorial. - * `Swashbuckle.AspNetCore.SwaggerUI`: Provides a user interface for exploring and testing API endpoints interactively through Swagger. +* `Microsoft.EntityFrameworkCore.InMemory`: Enables Entity Framework Core to work with an in-memory database rather than an external one, simplifying this tutorial. +* `Swashbuckle.AspNetCore.SwaggerUI`: Provides a user interface for exploring and testing API endpoints interactively through Swagger. * Add the following NuGet packages used in this tutorial: * From the **Tools** menu, select **NuGet Package Manager > Manage NuGet Packages for Solution**. From eb62cdaa7455622f6e2f472407a3a48c67d789e0 Mon Sep 17 00:00:00 2001 From: Wade Pickett Date: Sat, 15 Feb 2025 18:24:32 -0800 Subject: [PATCH 14/22] Update instructions for running and viewing output --- aspnetcore/tutorials/first-web-api.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/aspnetcore/tutorials/first-web-api.md b/aspnetcore/tutorials/first-web-api.md index 49cbb677004e..1c1874e94dd2 100644 --- a/aspnetcore/tutorials/first-web-api.md +++ b/aspnetcore/tutorials/first-web-api.md @@ -65,6 +65,7 @@ The following diagram shows the design of the app. This tutorial uses the following additional NuGet packages: + * `Microsoft.EntityFrameworkCore.InMemory`: Enables Entity Framework Core to work with an in-memory database rather than an external one, simplifying this tutorial. * `Swashbuckle.AspNetCore.SwaggerUI`: Provides a user interface for exploring and testing API endpoints interactively through Swagger. @@ -132,11 +133,15 @@ Press Ctrl+F5 to run without the debugger. [!INCLUDE[](~/includes/trustCertVS.md)] - Visual Studio output pane shows messages similar to the following, indicating that the app is running and awaiting requests: + Visual Studio launches a new console window with output messages similar to the following, indicating that the app is running and awaiting requests: ```output - Microsoft.Hosting.Lifetime: Information: Now listening on: https://localhost:{port number} - Microsoft.Hosting.Lifetime: Information: Now listening on: http://localhost:{port number} + info: Microsoft.Hosting.Lifetime[14] + Now listening on: https://localhost:7152 + info: Microsoft.Hosting.Lifetime[14] + Now listening on: http://localhost:5026 + info: Microsoft.Hosting.Lifetime[0] + Application started. Press Ctrl+C to shut down. ``` # [Visual Studio Code](#tab/visual-studio-code) @@ -151,7 +156,7 @@ Run the app: dotnet run --launch-profile https ``` - The output shows messages similar to the following, indicating that the app is running and awaiting requests: + Visual Studio Code launches a new terminal window displaying output messages similar to the following, indicating that the app is running and awaiting requests: ```output ... From b7722cabd57303503e6aa4e6be998e8e5210287e Mon Sep 17 00:00:00 2001 From: Wade Pickett Date: Tue, 18 Feb 2025 15:07:39 -0800 Subject: [PATCH 15/22] Update tutorial with Swagger UI configuration steps --- aspnetcore/tutorials/first-web-api.md | 129 ++++++++++++++------------ 1 file changed, 71 insertions(+), 58 deletions(-) diff --git a/aspnetcore/tutorials/first-web-api.md b/aspnetcore/tutorials/first-web-api.md index 1c1874e94dd2..115ae76d5ea8 100644 --- a/aspnetcore/tutorials/first-web-api.md +++ b/aspnetcore/tutorials/first-web-api.md @@ -4,7 +4,7 @@ author: wadepickett description: Learn how to build a controller-based web API with ASP.NET Core. ms.author: wpickett ms.custom: mvc, engagement-fy24 -ms.date: 02/13/2025 +ms.date: 02/14/2025 uid: tutorials/first-web-api --- @@ -65,7 +65,6 @@ The following diagram shows the design of the app. This tutorial uses the following additional NuGet packages: - * `Microsoft.EntityFrameworkCore.InMemory`: Enables Entity Framework Core to work with an in-memory database rather than an external one, simplifying this tutorial. * `Swashbuckle.AspNetCore.SwaggerUI`: Provides a user interface for exploring and testing API endpoints interactively through Swagger. @@ -79,7 +78,7 @@ This tutorial uses the following additional NuGet packages: # [Visual Studio Code](#tab/visual-studio-code) -* Open the [integrated terminal](https://code.visualstudio.com/docs/editor/integrated-terminal). +* Open the [integrated terminal](https://code.visualstudio.com/docs/terminal/basics). * Change directories (`cd`) to the folder that will contain the project folder. * Run the following commands: @@ -105,27 +104,13 @@ This tutorial uses the following additional NuGet packages: [!INCLUDE[](~/includes/package-reference.md)] -### Test the Project - The project template: * Creates a `WeatherForecast` API using controllers. * Adds the `Microsoft.AspNetCore.OpenApi` package for OpenAPI support as a reference in the project file **TodoApi.csproj**. * Adds OpenAPI services in **Program.cs** to automatically generate OpenAPI JSON documentation for the `WeatherForecast` API. -You can access the OpenAPI JSON documentation for the `WeatherForecast` API while the project is running by navigating your browser to `https://localhost:/openapi/v1.json`, where `` is the randomly chosen port number set in **Properties/launchSettings.json** as the port for HTTPS, and displayed in the "Now listening" output messages when the app is run. - -#### Configure the Swagger UI endpoint for the OpenAPI documentation - -To configure [Swagger](xref:tutorials/web-api-help-pages-using-swagger) UI for testing the API, add the following highlighted code to the `Program.cs` file in the **TodoAPI** project: - -[!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApi/Program.cs?name=snippet_First_Add_SwaggerUI&highlight=16-19)] - -The preceding highlighted code: - -* Adds the Swagger UI as a service to the app with `app.UseSwaggerUI()`. -* Sets the `SwaggerEndpoint()` option to the location of the OpenAPI documentation for this project. -* Ensures the Swagger UI is only available in the app development environment to limit information disclosure and security vulnerability. +### Run the Project # [Visual Studio](#tab/visual-studio) @@ -167,66 +152,94 @@ Run the app: * Ctrl+*click* the HTTPS URL in the output to test the web app in a browser. -After testing the web app in the following instruction, press Ctrl+C in the integrated terminal to shut it down. - --- -#### View the Swagger UI - -* Navigate a browser to `https://localhost:/swagger/index.html`, where `` is the randomly chosen port number set in **Properties/launchSettings.json** as the port for HTTPS, and displayed in the "Now listening" output messages when the app is run. - -The Swagger page `/swagger/index.html` is displayed. - -* Select **GET** > **Try it out** > **Execute**. - -The page displays: - -* The [Curl](https://curl.haxx.se/) command to test the WeatherForecast API. -* The URL to test the WeatherForecast API. -* The response code, body, and headers. -* A drop-down list box with media types and the example value and schema. - -If the Swagger page doesn't appear, see [this GitHub issue](https://github.com/dotnet/AspNetCore.Docs/issues/21647). - -Copy and paste the **Request URL** to the browser: `https://localhost:/weatherforecast` +Copy and paste the **Request URL** to the browser: `https://localhost:/weatherforecast`, where `` is the randomly chosen port number set in **Properties/launchSettings.json** as the port for HTTPS, and displayed in the "Now listening" output messages when the app is run. JSON similar to the following example is returned: ```json [ { - "date": "2019-07-16T19:04:05.7257911-06:00", - "temperatureC": 52, - "temperatureF": 125, - "summary": "Mild" + "date":"2025-02-19", + "temperatureC":10, + "temperatureF":49, + "summary":"Scorching" }, { - "date": "2019-07-17T19:04:05.7258461-06:00", - "temperatureC": 36, - "temperatureF": 96, - "summary": "Warm" + "date":"2025-02-20", + "temperatureC":32, + "temperatureF":89, + "summary":"Chilly" }, { - "date": "2019-07-18T19:04:05.7258467-06:00", - "temperatureC": 39, - "temperatureF": 102, - "summary": "Cool" + "date":"2025-02-21", + "temperatureC":-2, + "temperatureF":29, + "summary":"Scorching" }, { - "date": "2019-07-19T19:04:05.7258471-06:00", - "temperatureC": 10, - "temperatureF": 49, - "summary": "Bracing" + "date":"2025-02-22", + "temperatureC":-19, + "temperatureF":-2, + "summary":"Sweltering" }, { - "date": "2019-07-20T19:04:05.7258474-06:00", - "temperatureC": -1, - "temperatureF": 31, - "summary": "Chilly" + "date":"2025-02-23", + "temperatureC":40, + "temperatureF":103, + "summary":"Hot" } ] ``` +* View the generated OpenAPI specification for the `WeatherForecast` API while the project is running by navigating your browser to `https://localhost:/openapi/v1.json`. + +The OpenAPI specification is a document in JSON format that describes the structure and capabilities of your API, including endpoints, request/response formats, parameters, and more. It's essentially a blueprint of your API that can be used by various tools to understand and interact with your API. + +# [Visual Studio](#tab/visual-studio) + +* Stop the app by selecting the red square "Stop" button in the Visual Studio toolbar, or press Ctrl+C in the console window. + +# [Visual Studio Code](#tab/visual-studio-code) + +* Stop the app by pressing Ctrl+C in the integrated terminal. + +--- + +### Configure the Swagger UI endpoint for the OpenAPI documentation + +To configure [Swagger](xref:tutorials/web-api-help-pages-using-swagger) UI for testing the API, add the following highlighted code to the `Program.cs` file in the **TodoAPI** project: + +[!code-csharp[](~/tutorials/first-web-api/samples/9.0/TodoApi/Program.cs?name=snippet_First_Add_SwaggerUI&highlight=16-19)] + +The preceding highlighted code: + +* Adds the Swagger UI as a service to the app with `app.UseSwaggerUI()`. +* Sets the `SwaggerEndpoint()` option to the location of the OpenAPI documentation for this project. +* Ensures the Swagger UI is only available in the app development environment to limit information disclosure and security vulnerability. + +### View the Swagger UI + +* Press Ctrl+F5 to run the app. + +* Navigate a browser to `https://localhost:/swagger/index.html`, where `` is the randomly chosen port number set in **Properties/launchSettings.json** as the port for HTTPS, and displayed in the "Now listening" output messages when the app is run. + +The Swagger page `/swagger/index.html` is displayed. + +* Select **GET** > **Try it out** > **Execute**. + +The page displays: + +* The [Curl](https://curl.haxx.se/) command to test the WeatherForecast API. +* The URL to test the WeatherForecast API. +* The response code, body, and headers. +* A drop-down list box with media types and the example value and schema. + +If the Swagger page doesn't appear, see [this GitHub issue](https://github.com/dotnet/AspNetCore.Docs/issues/21647). + +* Stop the app. + ## Add a model class A *model* is a set of classes that represent the data that the app manages. The model for this app is the `TodoItem` class. From 1988ba983b3b917ef08b6d917284d8dd1b4f1255 Mon Sep 17 00:00:00 2001 From: Wade Pickett Date: Tue, 18 Feb 2025 15:25:54 -0800 Subject: [PATCH 16/22] Moved project template details in tutorial to just after creation --- aspnetcore/tutorials/first-web-api.md | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/aspnetcore/tutorials/first-web-api.md b/aspnetcore/tutorials/first-web-api.md index 115ae76d5ea8..a69e59b1f85e 100644 --- a/aspnetcore/tutorials/first-web-api.md +++ b/aspnetcore/tutorials/first-web-api.md @@ -4,7 +4,7 @@ author: wadepickett description: Learn how to build a controller-based web API with ASP.NET Core. ms.author: wpickett ms.custom: mvc, engagement-fy24 -ms.date: 02/14/2025 +ms.date: 02/13/2025 uid: tutorials/first-web-api --- @@ -61,6 +61,12 @@ The following diagram shows the design of the app. * Confirm the checkbox for **Use controllers** is checked. * Select **Create**. +The project template: + +* Creates a `WeatherForecast` API using controllers. +* Adds the `Microsoft.AspNetCore.OpenApi` package for OpenAPI support as a reference in the project file **TodoApi.csproj**. +* Adds OpenAPI services in **Program.cs** to automatically generate OpenAPI JSON documentation for the `WeatherForecast` API. + ## Add NuGet packages This tutorial uses the following additional NuGet packages: @@ -97,6 +103,12 @@ This tutorial uses the following additional NuGet packages: * `Microsoft.EntityFrameworkCore.InMemory`: Enables Entity Framework Core to work with an in-memory database so a real database won't be required for this tutorial. * `Swashbuckle.AspNetCore.SwaggerUI`: Provides a user interface for exploring and testing API endpoints interactively through Swagger. * Open the *TodoApi* folder in the current instance of Visual Studio Code. + + The project template: + + * Creates a `WeatherForecast` API using controllers. + * Adds the `Microsoft.AspNetCore.OpenApi` package for OpenAPI support as a reference in the project file **TodoApi.csproj**. + * Adds OpenAPI services in **Program.cs** to automatically generate OpenAPI JSON documentation for the `WeatherForecast` API. [!INCLUDE[](~/includes/vscode-trust-authors-add-assets.md)] @@ -104,12 +116,6 @@ This tutorial uses the following additional NuGet packages: [!INCLUDE[](~/includes/package-reference.md)] -The project template: - -* Creates a `WeatherForecast` API using controllers. -* Adds the `Microsoft.AspNetCore.OpenApi` package for OpenAPI support as a reference in the project file **TodoApi.csproj**. -* Adds OpenAPI services in **Program.cs** to automatically generate OpenAPI JSON documentation for the `WeatherForecast` API. - ### Run the Project # [Visual Studio](#tab/visual-studio) From 941c0c79422d7a40a02cde1373a715bbd80f3486 Mon Sep 17 00:00:00 2001 From: Wade Pickett Date: Tue, 18 Feb 2025 15:50:51 -0800 Subject: [PATCH 17/22] Fix formatting for request URL instructions --- aspnetcore/tutorials/first-web-api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aspnetcore/tutorials/first-web-api.md b/aspnetcore/tutorials/first-web-api.md index a69e59b1f85e..3e50711dec2a 100644 --- a/aspnetcore/tutorials/first-web-api.md +++ b/aspnetcore/tutorials/first-web-api.md @@ -160,7 +160,7 @@ Run the app: --- -Copy and paste the **Request URL** to the browser: `https://localhost:/weatherforecast`, where `` is the randomly chosen port number set in **Properties/launchSettings.json** as the port for HTTPS, and displayed in the "Now listening" output messages when the app is run. +* Copy and paste the **Request URL** to the browser: `https://localhost:/weatherforecast`, where `` is the randomly chosen port number set in **Properties/launchSettings.json** as the port for HTTPS, and displayed in the "Now listening" output messages when the app is run. JSON similar to the following example is returned: From e5938c118fab023b99c5b255ceb143f18431ee5d Mon Sep 17 00:00:00 2001 From: Wade Pickett Date: Tue, 18 Feb 2025 16:49:26 -0800 Subject: [PATCH 18/22] Fix list formatting for packages --- aspnetcore/tutorials/first-web-api.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aspnetcore/tutorials/first-web-api.md b/aspnetcore/tutorials/first-web-api.md index 3e50711dec2a..fbfea5f9f8ff 100644 --- a/aspnetcore/tutorials/first-web-api.md +++ b/aspnetcore/tutorials/first-web-api.md @@ -71,8 +71,8 @@ The project template: This tutorial uses the following additional NuGet packages: -* `Microsoft.EntityFrameworkCore.InMemory`: Enables Entity Framework Core to work with an in-memory database rather than an external one, simplifying this tutorial. -* `Swashbuckle.AspNetCore.SwaggerUI`: Provides a user interface for exploring and testing API endpoints interactively through Swagger. +* Microsoft.EntityFrameworkCore.InMemory: Enables Entity Framework Core to work with an in-memory database rather than an external one, simplifying this tutorial. +* Swashbuckle.AspNetCore.SwaggerUI: Provides a user interface for exploring and testing API endpoints interactively through Swagger. * Add the following NuGet packages used in this tutorial: * From the **Tools** menu, select **NuGet Package Manager > Manage NuGet Packages for Solution**. From 2f8bc20cfc21c25281fd96d2a97321bc8c89b0e1 Mon Sep 17 00:00:00 2001 From: Wade Pickett Date: Tue, 18 Feb 2025 17:50:42 -0800 Subject: [PATCH 19/22] Format NuGet package names as code, isolating list issue --- aspnetcore/tutorials/first-web-api.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aspnetcore/tutorials/first-web-api.md b/aspnetcore/tutorials/first-web-api.md index fbfea5f9f8ff..9b41e6e79ca8 100644 --- a/aspnetcore/tutorials/first-web-api.md +++ b/aspnetcore/tutorials/first-web-api.md @@ -71,8 +71,8 @@ The project template: This tutorial uses the following additional NuGet packages: -* Microsoft.EntityFrameworkCore.InMemory: Enables Entity Framework Core to work with an in-memory database rather than an external one, simplifying this tutorial. -* Swashbuckle.AspNetCore.SwaggerUI: Provides a user interface for exploring and testing API endpoints interactively through Swagger. +* `Microsoft.EntityFrameworkCore.InMemory` enables Entity Framework Core to work with an in-memory database rather than an external one, simplifying this tutorial. +* `Swashbuckle.AspNetCore.SwaggerUI` provides a user interface for exploring and testing API endpoints interactively through Swagger. * Add the following NuGet packages used in this tutorial: * From the **Tools** menu, select **NuGet Package Manager > Manage NuGet Packages for Solution**. From 89c91c1702b104780d52de05de573c44d35d039c Mon Sep 17 00:00:00 2001 From: Wade Pickett Date: Tue, 18 Feb 2025 18:01:53 -0800 Subject: [PATCH 20/22] Fix markdown header levels in tutorial --- aspnetcore/tutorials/first-web-api.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/aspnetcore/tutorials/first-web-api.md b/aspnetcore/tutorials/first-web-api.md index 9b41e6e79ca8..dfedf3bed964 100644 --- a/aspnetcore/tutorials/first-web-api.md +++ b/aspnetcore/tutorials/first-web-api.md @@ -116,7 +116,7 @@ This tutorial uses the following additional NuGet packages: [!INCLUDE[](~/includes/package-reference.md)] -### Run the Project +## Run the Project # [Visual Studio](#tab/visual-studio) @@ -213,7 +213,7 @@ The OpenAPI specification is a document in JSON format that describes the struct --- -### Configure the Swagger UI endpoint for the OpenAPI documentation +## Configure the Swagger UI endpoint for the OpenAPI documentation To configure [Swagger](xref:tutorials/web-api-help-pages-using-swagger) UI for testing the API, add the following highlighted code to the `Program.cs` file in the **TodoAPI** project: @@ -225,7 +225,7 @@ The preceding highlighted code: * Sets the `SwaggerEndpoint()` option to the location of the OpenAPI documentation for this project. * Ensures the Swagger UI is only available in the app development environment to limit information disclosure and security vulnerability. -### View the Swagger UI +## View the Swagger UI * Press Ctrl+F5 to run the app. From 0b12d08640cb1ffd97b49c9121e1f5519d32da87 Mon Sep 17 00:00:00 2001 From: Wade Pickett Date: Tue, 18 Feb 2025 18:28:31 -0800 Subject: [PATCH 21/22] Update formatting for stop button instructions --- aspnetcore/tutorials/first-web-api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aspnetcore/tutorials/first-web-api.md b/aspnetcore/tutorials/first-web-api.md index dfedf3bed964..f859a6461534 100644 --- a/aspnetcore/tutorials/first-web-api.md +++ b/aspnetcore/tutorials/first-web-api.md @@ -205,7 +205,7 @@ The OpenAPI specification is a document in JSON format that describes the struct # [Visual Studio](#tab/visual-studio) -* Stop the app by selecting the red square "Stop" button in the Visual Studio toolbar, or press Ctrl+C in the console window. +* Stop the app by selecting the red square **Stop** button in the Visual Studio toolbar, or press Ctrl+C in the console window. # [Visual Studio Code](#tab/visual-studio-code) From 90910ef0743ecbc8ff9c2cb389860b0dcfc3346b Mon Sep 17 00:00:00 2001 From: Wade Pickett Date: Tue, 18 Feb 2025 18:41:10 -0800 Subject: [PATCH 22/22] Fix indentation in first-web-api tutorial --- aspnetcore/tutorials/first-web-api.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/aspnetcore/tutorials/first-web-api.md b/aspnetcore/tutorials/first-web-api.md index f859a6461534..9739b5504253 100644 --- a/aspnetcore/tutorials/first-web-api.md +++ b/aspnetcore/tutorials/first-web-api.md @@ -96,13 +96,13 @@ This tutorial uses the following additional NuGet packages: code -r ../TodoApi ``` - These commands: +These commands: - * Create a new web API project and open it in Visual Studio Code. - * Adds NuGet packages that are used in this tutorial: - * `Microsoft.EntityFrameworkCore.InMemory`: Enables Entity Framework Core to work with an in-memory database so a real database won't be required for this tutorial. - * `Swashbuckle.AspNetCore.SwaggerUI`: Provides a user interface for exploring and testing API endpoints interactively through Swagger. - * Open the *TodoApi* folder in the current instance of Visual Studio Code. +* Create a new web API project and open it in Visual Studio Code. +* Adds NuGet packages that are used in this tutorial: + * `Microsoft.EntityFrameworkCore.InMemory`: Enables Entity Framework Core to work with an in-memory database so a real database won't be required for this tutorial. + * `Swashbuckle.AspNetCore.SwaggerUI`: Provides a user interface for exploring and testing API endpoints interactively through Swagger. +* Open the *TodoApi* folder in the current instance of Visual Studio Code. The project template: