Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poznámka:
Toto není nejnovější verze tohoto článku. Aktuální vydání najdete v verzi .NET 9 tohoto článku.
Varování
Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v zásadách podpory .NET a .NET Core. Pro aktuální vydání si přečtěte verzi tohoto článku pro .NET 9.
Důležité
Tyto informace se týkají předběžného vydání produktu, který může být podstatně změněn před komerčním vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Aktuální vydání najdete ve verzi .NET 9 tohoto článku.
ASP.NET Core podporuje dva přístupy k vytváření rozhraní API: přístup založený na kontroleru a minimální rozhraní API. Kontrolery v projektu rozhraní API jsou třídy, které jsou odvozeny od ControllerBase. Minimální rozhraní API definují koncové body s logickými obslužnými rutinami v lambda nebo metodách. Tento článek popisuje rozdíly mezi dvěma přístupy.
Návrh minimálních rozhraní API ve výchozím nastavení skryje třídu hostitele a zaměřuje se na konfiguraci a rozšiřitelnost prostřednictvím rozšiřujících metod, které používají funkce jako výrazy lambda. Kontrolery jsou třídy, které mohou přijímat závislosti prostřednictvím injektáže konstruktoru nebo injektáže vlastností a obecně se řídí objektově orientovanými vzory. Minimální rozhraní API podporují injektáž závislostí prostřednictvím jiných přístupů, jako je přístup k poskytovateli služeb.
Tady je ukázkový kód pro rozhraní API na základě kontrolerů:
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();
}
}
Následující kód poskytuje stejné funkce v minimálním projektu rozhraní API. Všimněte si, že minimální přístup rozhraní API zahrnuje zahrnutí souvisejícího kódu do výrazů lambda.
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();
}
}
Oba projekty rozhraní API odkazují na následující třídu:
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; }
}
Minimální rozhraní API mají mnoho stejných funkcí jako rozhraní API založená na kontroleru. Podporují konfiguraci a přizpůsobení potřebné ke škálování na více rozhraní API, zpracování složitých tras, použití autorizačních pravidel a řízení obsahu odpovědí rozhraní API. U rozhraní API založených na kontroleru je k dispozici několik možností, které ještě nejsou podporovány nebo implementovány minimálními rozhraními API. Tady jsou některé z nich:
- Žádná integrovaná podpora vazby modelu (IModelBinderProvider, IModelBinder). Podporu je možné přidat pomocí vlastního shim pro vazby.
- Žádná integrovaná podpora ověřování (IModelValidator).
- Nepodporuje části aplikace ani aplikační model. Neexistuje způsob, jak použít nebo vytvořit vlastní konvence.
- Žádná integrovaná podpora vykreslování zobrazení. Pro vykreslování zobrazení doporučujeme používat Razor Stránky.
- Žádná podpora pro JsonPatch
- Žádná podpora pro OData
Viz také
ASP.NET Core podporuje dva přístupy k vytváření rozhraní API: přístup založený na kontroleru a minimální rozhraní API. Kontrolery v projektu rozhraní API jsou třídy, které jsou odvozeny od ControllerBase. Minimální rozhraní API definují koncové body s logickými obslužnými rutinami v lambda nebo metodách. Tento článek popisuje rozdíly mezi dvěma přístupy.
Návrh minimálních rozhraní API ve výchozím nastavení skryje třídu hostitele a zaměřuje se na konfiguraci a rozšiřitelnost prostřednictvím rozšiřujících metod, které používají funkce jako výrazy lambda. Kontrolery jsou třídy, které mohou přijímat závislosti prostřednictvím injektáže konstruktoru nebo injektáže vlastností a obecně se řídí objektově orientovanými vzory. Minimální rozhraní API podporují injektáž závislostí prostřednictvím jiných přístupů, jako je přístup k poskytovateli služeb.
Tady je ukázkový kód pro rozhraní API na základě kontrolerů:
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();
}
}
Následující kód poskytuje stejné funkce v minimálním projektu rozhraní API. Všimněte si, že minimální přístup rozhraní API zahrnuje zahrnutí souvisejícího kódu do výrazů lambda.
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();
}
}
Oba projekty rozhraní API odkazují na následující třídu:
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; }
}
Minimální rozhraní API mají mnoho stejných funkcí jako rozhraní API založená na kontroleru. Podporují konfiguraci a přizpůsobení potřebné ke škálování na více rozhraní API, zpracování složitých tras, použití autorizačních pravidel a řízení obsahu odpovědí rozhraní API. U rozhraní API založených na kontroleru je k dispozici několik možností, které ještě nejsou podporovány nebo implementovány minimálními rozhraními API. Tady jsou některé z nich:
- Žádná integrovaná podpora vazby modelu (IModelBinderProvider, IModelBinder). Podporu lze přidat pomocí vlastní vazební vrstvy.
- Není podporována vazba z formulářů. To zahrnuje vazbu IFormFile.
- Žádná integrovaná podpora ověřování (IModelValidator).
- Nepodporuje části aplikace ani aplikační model. Neexistuje způsob, jak použít nebo vytvořit vlastní konvence.
- Žádná integrovaná podpora vykreslování zobrazení. Pro vykreslování zobrazení doporučujeme používat Razor Pages.
- Žádná podpora pro JsonPatch
- Žádná podpora pro OData