Dela via


Översikt över API:er

Anmärkning

Det här är inte den senaste versionen av den här artikeln. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .

Varning

Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i .NET och .NET Core Support Policy. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .

Viktigt!

Den här informationen gäller en förhandsversionsprodukt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, med avseende på den information som tillhandahålls här.

För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .

ASP.NET Core innehåller två metoder för att skapa HTTP-API:er: Minimala API:er och kontrollantbaserade API:er. För nya projekt rekommenderar vi att du använder minimala API:er eftersom de tillhandahåller en förenklad metod med höga prestanda för att skapa API:er med minimal kod och konfiguration.

Minimala API:er är den rekommenderade metoden för att skapa snabba HTTP-API:er med ASP.NET Core. De gör att du kan skapa fullt fungerande REST slutpunkter med minimal kod och konfiguration. Hoppa över traditionella byggnadsställningar och undvik onödiga kontrollanter genom att flytande deklarera API-vägar och åtgärder.

Här är ett enkelt exempel som skapar ett API i webbappens rot:

var app = WebApplication.Create(args);

app.MapGet("/", () => "Hello World!");

app.Run();

De flesta API:er accepterar parametrar som en del av vägen:

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

app.MapGet("/users/{userId}/books/{bookId}", 
    (int userId, int bookId) => $"The user id is {userId} and book id is {bookId}");

app.Run();

Minimala API:er stöder den konfiguration och anpassning som krävs för att skala till flera API:er, hantera komplexa vägar, tillämpa auktoriseringsregler och kontrollera innehållet i API-svar.

Komma igång med minimala API:er

Controller-baserade API:er – alternativ metod

ASP.NET Core har också stöd för en kontrollantbaserad metod där kontrollanter är klasser som härleds från ControllerBase. Den här metoden följer traditionella objektorienterade mönster och kan vara att föredra för:

  • Stora program med komplex affärslogik
  • Team som är bekanta med MVC-mönstret
  • Program som kräver specifika MVC-funktioner

Här är exempelkoden för ett API baserat på kontrollanter:


namespace APIWithControllers;

public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);

        builder.Services.AddControllers();
        var app = builder.Build();

        app.UseHttpsRedirection();

        app.MapControllers();

        app.Run();
    }
}
using Microsoft.AspNetCore.Mvc;

namespace APIWithControllers.Controllers;
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    private static readonly string[] Summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

    private readonly ILogger<WeatherForecastController> _logger;

    public WeatherForecastController(ILogger<WeatherForecastController> logger)
    {
        _logger = logger;
    }

    [HttpGet(Name = "GetWeatherForecast")]
    public IEnumerable<WeatherForecast> Get()
    {
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
            TemperatureC = Random.Shared.Next(-20, 55),
            Summary = Summaries[Random.Shared.Next(Summaries.Length)]
        })
        .ToArray();
    }
}

Följande kod innehåller samma funktioner med den rekommenderade metoden Minimal API:


namespace MinimalAPI;

public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);

        var app = builder.Build();

        app.UseHttpsRedirection();

        var summaries = new[]
        {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };

        app.MapGet("/weatherforecast", (HttpContext httpContext) =>
        {
            var forecast = Enumerable.Range(1, 5).Select(index =>
                new WeatherForecast
                {
                    Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
                    TemperatureC = Random.Shared.Next(-20, 55),
                    Summary = summaries[Random.Shared.Next(summaries.Length)]
                })
                .ToArray();
            return forecast;
        });

        app.Run();
    }
}

Båda API-projekten refererar till följande klass:

namespace APIWithControllers;

public class WeatherForecast
{
    public DateOnly Date { get; set; }

    public int TemperatureC { get; set; }

    public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);

    public string? Summary { get; set; }
}

Välja mellan metoder

Börja med Minimala API:er för nya projekt. De erbjuder:

  • Enklare syntax – Mindre pannplåtskod
  • Bättre prestanda – Lägre omkostnader jämfört med styrenheter
  • Enklare testning – Förenklad enhets- och integreringstestning
  • Modern metod – Utnyttjar de senaste .NET-funktionerna

Överväg kontrollantbaserade API:er om du behöver:

De flesta av dessa funktioner kan implementeras i Minimala API:er med anpassade lösningar, men kontrollanter tillhandahåller dem direkt.

Se även

ASP.NET Core innehåller två metoder för att skapa HTTP-API:er: Minimala API:er och kontrollantbaserade API:er. För nya projekt rekommenderar vi att du använder minimala API:er eftersom de tillhandahåller en förenklad metod med höga prestanda för att skapa API:er med minimal kod och konfiguration.

Minimala API:er är den rekommenderade metoden för att skapa snabba HTTP-API:er med ASP.NET Core. De gör att du kan skapa fullt fungerande REST slutpunkter med minimal kod och konfiguration.

Här är ett enkelt exempel:

var app = WebApplication.Create(args);

app.MapGet("/", () => "Hello World!");

app.Run();

Komma igång med minimala API:er

Controller-baserade API:er – alternativ metod

Kontrollanter är klasser som härleds från ControllerBase. Den här metoden följer traditionella objektorienterade mönster.

Här är exempelkoden för ett API baserat på kontrollanter:


namespace APIWithControllers;

public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);

        builder.Services.AddControllers();
        var app = builder.Build();

        app.UseHttpsRedirection();

        app.MapControllers();

        app.Run();
    }
}
using Microsoft.AspNetCore.Mvc;

namespace APIWithControllers.Controllers;
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    private static readonly string[] Summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

    private readonly ILogger<WeatherForecastController> _logger;

    public WeatherForecastController(ILogger<WeatherForecastController> logger)
    {
        _logger = logger;
    }

    [HttpGet(Name = "GetWeatherForecast")]
    public IEnumerable<WeatherForecast> Get()
    {
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
            TemperatureC = Random.Shared.Next(-20, 55),
            Summary = Summaries[Random.Shared.Next(Summaries.Length)]
        })
        .ToArray();
    }
}

Följande kod innehåller samma funktioner med den rekommenderade metoden Minimal API:


namespace MinimalAPI;

public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);

        var app = builder.Build();

        app.UseHttpsRedirection();

        var summaries = new[]
        {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };

        app.MapGet("/weatherforecast", (HttpContext httpContext) =>
        {
            var forecast = Enumerable.Range(1, 5).Select(index =>
                new WeatherForecast
                {
                    Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
                    TemperatureC = Random.Shared.Next(-20, 55),
                    Summary = summaries[Random.Shared.Next(summaries.Length)]
                })
                .ToArray();
            return forecast;
        });

        app.Run();
    }
}

Båda API-projekten refererar till följande klass:

namespace APIWithControllers;

public class WeatherForecast
{
    public DateOnly Date { get; set; }

    public int TemperatureC { get; set; }

    public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);

    public string? Summary { get; set; }
}

Välja mellan metoder

Börja med Minimala API:er för nya projekt. Överväg kontrollantbaserade API:er om du behöver:

Se även