-
Create and add a new project named
BackEnd
and name the solutionConferencePlanner
using File / New / ASP.NET Core Web Application. Select the Web API template, No Auth, no Docker support.Note: If not using Visual Studio, create the project using
dotnet new webapi
at the cmd line, details as follows:- Create folder ConferencePlanner and call
dotnet new sln
at the cmd line to create a solution - Create sub-folder BackEnd and create a project using
dotnet new webapi
at the cmd line inside the folder BackEnd - From the ConferencePlanner folder, add the project to the solution using
dotnet sln add BackEnd/BackEnd.csproj
- Create folder ConferencePlanner and call
-
Add a new
Models
folder to the BackEnd project. -
Add a new
Speaker
class inside the Models folder using the following code:using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading.Tasks; namespace BackEnd.Models { public class Speaker { public int Id { get; set; } [Required] [StringLength(200)] public string Name { get; set; } [StringLength(4000)] public string Bio { get; set; } [StringLength(1000)] public virtual string WebSite { get; set; } } }
-
Add a reference in the BackEnd project to the NuGet package
Microsoft.EntityFrameworkCore.SqlServer
version3.1.3
.This can be done from the command line in the
BackEnd
folder usingdotnet add package Microsoft.EntityFrameworkCore.SqlServer --version 3.1.3
-
Add a reference in the BackEnd project to the NuGet package
Microsoft.EntityFrameworkCore.Sqlite
version3.1.3
.This can be done from the command line in the
BackEnd
folder usingdotnet add package Microsoft.EntityFrameworkCore.Sqlite --version 3.1.3
-
Next we'll create a new Entity Framework DbContext. Create a new
ApplicationDbContext
class in theModels
folder using the following code:using Microsoft.EntityFrameworkCore; namespace BackEnd.Models { public class ApplicationDbContext : DbContext { public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } public DbSet<Speaker> Speakers { get; set; } } }
-
Add a connection string to the
appsettings.json
file for this database:{ "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-BackEnd-931E56BD-86CB-4A96-BD99-2C6A6ABB0829;Trusted_Connection=True;MultipleActiveResultSets=true" }, "Logging": { "LogLevel": { "Default": "Warning", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*" }
- Add the following code to the top of the
ConfigureServices()
method inStartup.cs
:services.AddDbContext<ApplicationDbContext>(options => { if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")); } else { options.UseSqlite("Data Source=conferences.db"); } });
This code registers the
ApplicationDbContext
service so it can be injected into controllers. Additionally, it configures operating system specific database technologies and connection strings - Ensure the following 'using' statements are at the top of the
Startup.cs
file to allow the references in our code to work:using BackEnd.Models; using System.Runtime.InteropServices; using Microsoft.EntityFrameworkCore;
- Add a reference to the NuGet package
Microsoft.EntityFrameworkCore.Tools
version3.1.3
.If you're not using Visual Studio install the package from the command line in the
BackEnd
folder withdotnet add package Microsoft.EntityFrameworkCore.Tools --version 3.1.3
-
In Visual Studio, select the Tools -> NuGet Package Manager -> Package Manager Console
-
Run the following commands in the Package Manager Console
Add-Migration Initial Update-Database
-
Install the EntityFramework global tool
dotnet-ef
using the following command in theBackEnd
folder:dotnet tool install -g dotnet-ef --version 3.1.3
-
Open a command prompt and navigate to the project directory. (The directory containing the
Startup.cs
file). -
Run the following commands in the command prompt:
dotnet build dotnet ef migrations add Initial dotnet ef database update
Commands Explained
Command | Description |
---|---|
dotnet ef migrations add Initial / Add-Migration Initial |
generates code to create the initial database schema based on the model specified in 'ApplicationDbContext.cs'. Initial is the name of the migration. |
dotnet ef database update / Update-Database |
creates the database |
For more information on these commands and scaffolding in general, see this tutorial.
If your database ever gets in a bad state and you'd like to reset things, you can use
dotnet ef database drop
followed bydotnet ef database update
to remove your database and run all migrations again.
First, open the Controllers
folder and take a quick look at the WeatherForecastController
. You'll see a simple function that corresponds to the HTTP GET verb. You'll see the output of this controller in a bit, but first we'll build our own API controller for the Speakers
model class.
- Right-click the
Controllers
folder and select Add/Controller. Select "API Controller with actions, using Entity Framework". - In the dialog, select the
Speaker
model for the Model Class,ApplicationDbContext
for the "Data Context Class" and click theAdd
button.
-
Install the "Microsoft.VisualStudio.Web.CodeGeneration.Design" package
dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design --version 3.1.2
-
Install the
aspnet-codegenerator
global tool by running the following command:dotnet tool install -g dotnet-aspnet-codegenerator --version 3.1.2
Note: You will need to close and reopen the console window to be able to use this tool.
- Run the following in the project folder at the cmd line:
dotnet aspnet-codegenerator controller -api -name SpeakersController -m Speaker -dc BackEnd.Models.ApplicationDbContext -outDir Controllers
In this section, we'll be adding documentation to our API using the Swashbuckle NuGet package.
Swashbuckle.AspNetCore is an open source project for generating Swagger documents for Web APIs that are built with ASP.NET Core.
Swagger is a machine readable representation of a RESTful API that enables support for interactive documentation, client SDK generation and discoverability.
Additional information on using Swashbuckle in ASP.NET Core is available in this tutorial: ASP.NET Web API Help Pages using Swagger
-
Add a reference to the NuGet package
Swashbuckle.AspNetCore
version5.3.0
.This can be done from the command line using
dotnet add package Swashbuckle.AspNetCore --version 5.3.0
-
Add the Swashbuckle services in your
ConfigureServices
method:services.AddControllers(); services.AddSwaggerGen(options => options.SwaggerDoc("v1", new OpenApiInfo { Title = "Conference Planner API", Version = "v1" }) );
-
Ensure your Startup.cs file contains the following 'using' statements:
using Microsoft.OpenApi.Models; using System.Threading.Tasks;
-
Configure Swashbuckle by adding the following lines just before
UseRouting
in theConfigure
method inStartup.cs
:app.UseSwagger(); app.UseSwaggerUI(options => options.SwaggerEndpoint("/swagger/v1/swagger.json", "Conference Planner API v1") );
-
Add a MapGet to the beginning of the
UseEndpoints
statement in the pipeline that redirects requests from the root of our application to the swagger end point.app.UseEndpoints(endpoints => { endpoints.MapGet("/", context => { context.Response.Redirect("/swagger/"); return Task.CompletedTask; }); endpoints.MapControllers(); });
-
Run the application (F5 in Visual Studio or
dotnet run
from console). -
Browse to the Swagger UI at
http://localhost:<random_port>/swagger
. -
First, click on the GET button in WeatherForecast section. You'll see the values that were listed in the
WeatherForecastController
earlier. -
In the Speakers section, click on the GET button. You'll see there are not speakers returned. Let's add one!
-
In the Speakers section, click on the POST button. Referencing the example on the right, fill in a speaker request. Leave the
ID
blank, that will be filled in by the database.{ "name": "Dorothy Gale", "bio": "Amateur meteorologist, Oz aficionado, and lead guide for Whirlwind Tours of Kansas", "webSite": "https://en.wikipedia.org/wiki/Dorothy_Gale" }
-
When you click the Try it out! button, you should see a success response from the server. Now, clicking the GET button above should show your newly added speaker.
Next: Session #2 - Back-end