Use logging and DI in minimal APIs in ASP.NET Core 6

Jean J. Sanders

ASP.Net Core 6 introduces a simplified internet hosting product that can be used to put into action light-weight APIs with minimum dependencies. These small APIs significantly decrease the boilerplate code you need to generate to get your ASP.Web Core 6 applications up and running.

We discussed how to get began with small APIs in an before post. In this short article we’ll explore extra highly developed areas of negligible APIs which includes employing logging, looking through from the configuration procedure, and employing dependency injection.

To work with the code examples provided in this post, you must have Visible Studio 2022 set up in your method. If you really do not by now have a duplicate, you can down load Visual Studio 2022 below.

Develop an ASP.Net Core small net API task in Visible Studio 2022

First off, let’s generate an ASP.Internet Core job in Visual Studio 2022. Subsequent these techniques will generate a new ASP.Web Core Internet API 6 project in Visible Studio 2022:

  1. Start the Visible Studio 2022 IDE.
  2. Simply click on “Create new venture.”
  3. In the “Create new project” window, find “ASP.Internet Core Net API” from the listing of templates displayed.
  4. Simply click Subsequent.
  5. In the “Configure your new project” window, specify the name and area for the new job.
  6. Optionally look at the “Place resolution and challenge in the same directory” verify box, based on your choices.
  7. Click Upcoming.
  8. In the “Additional Information” window demonstrated upcoming, uncheck the examine box that states “Use controllers…” considering the fact that we’ll be applying minimal APIs in this illustration. Leave the “Authentication Type” as “None” (default).
  9. Be certain that the examine containers “Enable Docker,” “Configure for HTTPS,” and “Enable Open API Support” are unchecked as we won’t be using any of these characteristics below.
  10. Simply click Produce.

This will create a new ASP.Net Core 6 Web API task in Visible Studio 2022. We’ll use this job to perform with a nominal API in the subsequent sections of this article.

Operate a nominal net API

You can get your negligible API working with just a handful of strains of code:

var builder = WebApplication.CreateBuilder(args)
var app = builder.Make()
app.MapGet("", () => "This is an example of a nominal API")

Configure a number of ports for a minimal world-wide-web API

The next code snippet illustrates how you can configure your minimal API to operate on a single particular port.

var app = WebApplication.Produce(args)
app.MapGet("", () => "Howdy Globe!")

When you operate the software and browse to this URL, you need to see the “Hello Entire world!” information displayed in your net browser.

You can use numerous ports by introducing the URLs as shown in the adhering to code snippet.


In this scenario, if you browse to any of these endpoints, the similar “Hello Globe!” information will be shown.

You can even browse the port from the ecosystem as shown in the code snippet provided underneath.

var app = WebApplication.Generate(args)
var port = Ecosystem.GetEnvironmentVariable("PORT") ?? "5155"
app.MapGet("", () => "Hello Planet!")

Use logging in a minimum website API

You can also use logging in your minimum APIs. Listed here is how you can log information to the console making use of Serilog:

var logger = new LoggerConfiguration()

You can use Serilog for generating logs that persist application restarts as nicely. Serilog supports logging to a databases, file, cloud storage, and other targets. The next code snippet illustrates how you can use Serilog in small APIs.

var builder = WebApplication.CreateBuilder(args)
Log.Logger = new LoggerConfiguration()
    .WriteTo.File("logs.txt", rollingInterval: RollingInterval.Day)

The adhering to code snippet exhibits how you can use logging in your nominal API.

application.MapGet("", (ILoggerFactory loggerFactory) => 
    var logger = loggerFactory.CreateLogger("Commence")
    return "Logging at get the job done!"

Read from the configuration method in a nominal API

You can also study from the configuration process in your minimum API. The adhering to code snippet shows how this can be obtained.

var app = WebApplication.Develop(args)
var information = application.Configuration["TextMessage"] ?? "This is a default information."
application.MapGet("", () => concept)

Use dependency injection in a small net API

If you would like to use a HttpClient occasion to connect to a remote source, you can use dependency injection as shown in the code snippet given below.

application.MapGet("", (IHttpClientFactory httpClientFactory) => "Within HttpGet technique")

Remember to incorporate HttpClient to the container working with the subsequent code.


You can also consider gain of dependency injection in a HttpPost technique. The code snippet beneath displays how you can move an occasion of IHttpClientFactory as a parameter to your HttpPost approach.

app.MapPost("", (IHttpClientFactory httpClientFactory) =>

    var shopper = httpClientFactory.CreateClient()
    return Success.Alright()

Inject a custom made course in a nominal website API

You can also inject an instance of a custom made course in your negligible API. To illustrate this, let’s carry out two styles: the IAuthorRepository interface and the AuthorRepository course. We’ll use these kinds to employ dependency injection in our minimum API.

Create a new file named IAuthorRepository.cs and insert the following code:

    public interface IAuthorRepository
        community Checklist GetAuthors()
        public Writer GetAuthor(int id)

The AuthorRepository class implements the IAuthorRepository interface as demonstrated under.

 public class AuthorRepository: IAuthorRepository
        non-public readonly Checklist _authors
        community AuthorRepository()
            _authors = new Listing
                new Writer
                    Id = 1,
                    FirstName = "Joydip",
                    LastName = "Kanjilal"
                new Writer
                    Id = 2,
                    FirstName = "Steve",
                    LastName = "Smith"
                new Writer
                    Id = 3,
                    FirstName = "Julie",
                    LastName = "Lerman"
                new Creator
                    Id = 4,
                    FirstName = "Simon",
                    LastName = "Bisson"
        general public List GetAuthors()
            return _authors
        community Writer GetAuthor(int id)
            return _authors.Find(x=> x.Id == id)

Inject a customized interface in a minimal world-wide-web API

The pursuing code snippet illustrates how you can inject an occasion of the IAuthorRepository interface.

app.MapGet("api/author/id:int", async (IAuthorRepository authorRepository, HttpContext httpContext) =>

    var id = int.Parse((string)httpContext.Ask for.RouteValues["id"])
    var writer = authorRepository.GetAuthor(id)
    if (writer == null)
        return Results.NotFound()
    return Outcomes.Alright(writer)

At last, .Net 6 incorporates a fantastic new function, worldwide applying directives. To leverage world usings, make a new file named Usings.cs and go all of your employing statements there. You can use this element with your ASP.Internet Main 6 or minimal APIs.

I’ll have additional to say about small APIs (these types of as performing with safety and middleware) in a future write-up listed here.

Copyright © 2022 IDG Communications, Inc.

Next Post

China strategy is about rules-based order, not 'new Cold War,' Blinken says

Blinken calls China the most serious obstacle to worldwide purchase In reaction, China claims equally stand to gain from cooperation WASHINGTON, Could 26 (Reuters) – The United States will not block China from increasing its economic climate, but would like it to adhere to global guidelines, Secretary of State Antony […]

You May Like