Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Note
Ez nem a cikk legújabb verziója. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.
Warning
A ASP.NET Core ezen verziója már nem támogatott. További információ: .NET és .NET Core támogatási szabályzat. A jelen cikk .NET 9-es verzióját lásd az aktuális kiadásért .
Készítette: Tim Deschryver és Rick Anderson
Ez az oktatóanyag az adatbázist használó vezérlőalapú webes API létrehozásának alapjait mutatja be. Az API-k ASP.NET Core-ban való létrehozásának másik módszere a minimális API-k létrehozása. Ha segítségre van szüksége a minimális API-k és a vezérlőalapú API-k közötti választáshoz, tekintse meg API-k áttekintését. A minimális API-k létrehozásáról a következő oktatóanyagban olvashat: Minimális API létrehozása ASP.NET Core használatával.
Overview
Ez az oktatóanyag a következő API-t hozza létre:
| API | Description | A kérés tartalma | Válasz törzse |
|---|---|---|---|
GET /api/todoitems |
Az összes to-do elem lekérése | None | teendők tömbje |
GET /api/todoitems/{id} |
Elem lekérése azonosító alapján | None | Teendő elem |
POST /api/todoitems |
Új elem hozzáadása | Teendő elem | Teendő elem |
PUT /api/todoitems/{id} |
Meglévő elem frissítése | Teendő elem | None |
DELETE /api/todoitems/{id} |
Elem törlése | None | None |
Az alábbi ábrán az alkalmazás tervezése látható.
Prerequisites
Visual Studio 2022 az ASP.NET és webfejlesztési feladatokkal.
Webes API-projekt létrehozása
- A Fájl menüben válassza a Új>Projektlehetőséget.
- A keresőmezőbe írja be a Web API.
- Válassza a ASP.NET Core Web API sablont, majd válassza a Következőlehetőséget.
- Az új projekt konfigurálása párbeszédpanelen nevezze el a todoApi nevű projektet, és válassza a Tovább gombot.
- A További információk párbeszédpanelen:
- Győződjön meg arról, hogy a keretrendszer.NET 9.0 (standard kifejezéstámogatás).
- Ellenőrizze, hogy be van-e jelölve az OpenAPI-támogatás engedélyezése jelölőnégyzet.
- Győződjön meg arról, hogy a Vezérlők használata (a minimális API-k használatához való törlés) jelölőnégyzet be van jelölve, be van jelölve.
- Válassza a Create gombot.
NuGet-csomag hozzáadása
Az oktatóanyagban használt adatbázis támogatásához NuGet-csomagot kell hozzáadni.
- Az Eszközök menüben válassza a NuGet Package Manager > Megoldáshoz készült NuGet-csomagok kezeléselehetőséget.
- Válassza a Tallózás lapot.
- Írja be Microsoft.EntityFrameworkCore.InMemory a keresőmezőbe, majd válassza a
Microsoft.EntityFrameworkCore.InMemory. - Jelölje be a Project jelölőnégyzetet a jobb oldali panelen, majd válassza a Telepítéslehetőséget.
Note
A csomagok .NET-alkalmazásokhoz való hozzáadásáról a Csomagok telepítése és kezeléseCsomaghasználati munkafolyamat (NuGet-dokumentáció)című cikkben talál útmutatást. Ellenőrizze a megfelelő csomagverziókat a NuGet.org.
A projekt futtatása
A projektsablon létrehoz egy WeatherForecast API-t az OpenAPI támogatásával.
Nyomja le a Ctrl+F5 billentyűkombinációt a hibakereső nélküli futtatáshoz.
A Visual Studio az alábbi párbeszédpanelt jeleníti meg, ha egy projekt még nincs ssl használatára konfigurálva:
Válassza Igen lehetőséget, ha megbízik az IIS Express SSL-tanúsítványban.
A következő párbeszédpanel jelenik meg:
Válassza Igen lehetőséget, ha elfogadja, hogy megbízik a fejlesztési tanúsítványban.
A Firefox böngésző megbízhatóságáról további információt a Firefox SEC_ERROR_INADEQUATE_KEY_USAGE tanúsítványhibacímű témakörben talál.
A Visual Studio elindít egy terminálablakot, és megjeleníti a futó alkalmazás URL-címét. Az API a https://localhost:<port> címen van elhelyezve, ahol a projekt létrehozásakor a <port> véletlenszerűen kiválasztott portszám.
...
info: Microsoft.Hosting.Lifetime[14]
Now listening on: https://localhost:7260
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://localhost:7261
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
...
Ctrl+kattintson a kimenetben található HTTPS URL-címre a webalkalmazás böngészőben való teszteléséhez. Nincs végpont, https://localhost:<port>ezért a böngésző a HTTP 404 Not Found értéket adja vissza.
Fűzze hozzá /weatherforecast az URL-címet a WeatherForecast API teszteléséhez.
A böngésző a következő példához hasonlóan jeleníti meg a JSON-t:
[
{
"date": "2025-07-16",
"temperatureC": 52,
"temperatureF": 125,
"summary": "Mild"
},
{
"date": "2025-07-17",
"temperatureC": 36,
"temperatureF": 96,
"summary": "Warm"
},
{
"date": "2025-07-18",
"temperatureC": 39,
"temperatureF": 102,
"summary": "Cool"
},
{
"date": "2025-07-19",
"temperatureC": 10,
"temperatureF": 49,
"summary": "Bracing"
},
{
"date": "2025-07-20",
"temperatureC": -1,
"temperatureF": 31,
"summary": "Chilly"
}
]
A projekt tesztelése
Ez az oktatóanyag az Endpoints Explorer-t és a .http fájlokat használja az API teszteléséhez.
Modellosztály hozzáadása
A modell olyan osztályok készlete, amelyek az alkalmazás által kezelt adatokat képviselik. Az alkalmazás modellje az TodoItem osztály.
- A Megoldáskezelő-ben kattintson a jobb gombbal a projektre. Válassza >Új mappa hozzáadásalehetőséget. Nevezze el a mappát
Models. - Kattintson a jobb gombbal a
Modelsmappára, és válassza a Hozzáadás>Osztályt lehetőséget. Nevezze el a TodoItem osztályt, és válassza a Hozzáadás lehetőséget. - Cserélje le a sablonkódot a következőre:
namespace TodoApi.Models;
public class TodoItem
{
public long Id { get; set; }
public string? Name { get; set; }
public bool IsComplete { get; set; }
}
A Id tulajdonság egy relációs adatbázis egyedi kulcsaként működik.
Modelosztályok bárhová elhelyezhetők a projektben, de a Models mappát hagyományosan az előírások szerint használják.
Adatbázis-környezet hozzáadása
Az adatbázis-környezet az a fő osztály, amely koordinálja az entitás-keretrendszer funkcióit egy adatmodellhez. Ez az osztály az osztályból Microsoft.EntityFrameworkCore.DbContext származtatva jön létre.
Kattintson a jobb gombbal a
Modelsmappára, és válassza a Hozzáadás>Osztályt lehetőséget. Nevezze el a TodoContext osztályt, és kattintson a Hozzáadás gombra.Írja be a következő kódot:
using Microsoft.EntityFrameworkCore; namespace TodoApi.Models; public class TodoContext : DbContext { public TodoContext(DbContextOptions<TodoContext> options) : base(options) { } public DbSet<TodoItem> TodoItems { get; set; } = null!; }
Az adatbázis-környezet regisztrálása
Az ASP.NET Core-ban az olyan szolgáltatásokat, mint a DB-környezet, regisztrálni kell a függőséginjektálási (DI) tárolóban. A tároló biztosítja a szolgáltatást a vezérlők számára.
Frissítse Program.cs a következő kiemelt kóddal:
using Microsoft.EntityFrameworkCore;
using TodoApi.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddOpenApi();
builder.Services.AddDbContext<TodoContext>(opt =>
opt.UseInMemoryDatabase("TodoList"));
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.MapOpenApi();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Az előző kód:
-
usingirányelveket ad hozzá. - Hozzáadja az adatbázis-környezetet a DI-tárolóhoz.
- Megadja, hogy az adatbázis-környezet memórián belüli adatbázist használjon.
Vezérlő állványzata
Kattintson a jobb gombbal a
Controllersmappára.Válassza a Hozzáadás lehetőséget>New Scaffolded Item.
Válassza a műveletekkel rendelkező API-vezérlőt az Entity Framework használatával, majd válassza a Hozzáadás lehetőséget.
Az Api Controller hozzáadása műveletekkel az Entity Framework párbeszédpanelen :
- Válassza a TodoItem (TodoApi.Models) lehetőséget a Modell osztályban.
- Válassza a TodoContext (TodoApi.Models) lehetőséget az Adatkörnyezet osztályban.
- Válassza a Hozzáadás lehetőséget.
Ha az állványozási művelet sikertelen, kattintson a Hozzáadás gombra, hogy újra megpróbálja az állványozást.
Ez a lépés hozzáadja a Microsoft.VisualStudio.Web.CodeGeneration.Design és a Microsoft.EntityFrameworkCore.Tools NuGet-csomagokat a projekthez.
Ezek a csomagok az állványozáshoz szükségesek.
A létrehozott kód:
- Az osztály megjelölése az
[ApiController]attribútummal. Ez az attribútum azt jelzi, hogy a vezérlő válaszol a webes API-kérésekre. Az attribútum által lehetővé tetső konkrét viselkedésekkel kapcsolatos információkért lásd: Webes API-k létrehozása ASP.NET Core használatával. - A DI használatával injektálja az adatbázis-környezetet (
TodoContext) a vezérlőbe. Az adatbázis-környezet a vezérlőben található CRUD-metódusok mindegyikében használatos.
A ASP.NET Core-sablonok a következőhöz:
- A nézetekkel rendelkező vezérlők szerepelnek
[action]az útvonalsablonban. - Az API-vezérlők nem szerepelnek
[action]az útvonalsablonban.
Ha a [action] jogkivonat nem szerepel az útvonalsablonban, a művelet neve (metódus neve) nem szerepel a végpontban. Vagyis a művelet társított metódusneve nem szerepel az egyező útvonalban.
A PostTodoItem létrehozási metódus frissítése
Frissítse a visszatérési utasítást a PostTodoItem úgy, hogy a nameof operátort használja:
[HttpPost]
public async Task<ActionResult<TodoItem>> PostTodoItem(TodoItem todoItem)
{
_context.TodoItems.Add(todoItem);
await _context.SaveChangesAsync();
// return CreatedAtAction("GetTodoItem", new { id = todoItem.Id }, todoItem);
return CreatedAtAction(nameof(GetTodoItem), new { id = todoItem.Id }, todoItem);
}
Az előző kód egy HTTP POST metódus, amelyet az [HttpPost] attribútum jelez. A metódus lekéri a TodoItem értékét a HTTP-kérés törzséből.
További információ: Attribútum-útválasztás Http[Verb] attribútumokkal.
A CreatedAtAction módszer:
- Ha sikeres, egy HTTP 201-állapotkódot ad vissza.
HTTP 201egy olyan metódus szokásos válaszaHTTP POST, amely új erőforrást hoz létre a kiszolgálón. -
Hely fejlécet ad hozzá a válaszhoz. A
Locationfejléc az újonnan létrehozott to-do elem URI-ját adja meg. További információ: 10.2.2 201 Létrehozás. - A
GetTodoItemfejléc URI-jának létrehozásához aLocationműveletre hivatkozik. A C#nameof-kulcsszóval elkerülhető, hogy a hívásbanCreatedAtActiona művelet neve nehezen kódolódjon.
PostTodoItem tesztelése
Válassza a Nézet>Egyéb ablakok>Endpoints Explorer.
Kattintson a jobb gombbal a POST végpontra, és válassza a Kérés létrehozásalehetőséget.
Egy új fájl jön létre a
TodoApi.httpnevű projektmappában, amely a következő példához hasonló tartalommal rendelkezik:@TodoApi_HostAddress = https://localhost:49738 POST {{TodoApi_HostAddress}}/api/todoitems Content-Type: application/json { //TodoItem } ###- Az első sor létrehoz egy változót, amelyet az összes végponthoz használnak.
- A következő sor egy POST-kérést határoz meg.
- A POST kérelemsor utáni sorok határozzák meg a fejléceket és a kérelem törzsének helyőrzőit.
- A tripla hashtag (
###) sor egy kérések közötti elválasztó jel: ami utána következik, az egy másik kéréshez tartozik.
A POST-kérelem elvár egy
TodoItem. A teendő definiálásához cserélje le a//TodoItemmegjegyzést az alábbi JSON-ra:{ "name": "walk dog", "isComplete": true }A TodoApi.http fájlnak most az alábbi példához hasonlóan kell kinéznie, de a portszámmal:
@TodoApi_HostAddress = https://localhost:7260 Post {{TodoApi_HostAddress}}/api/todoitems Content-Type: application/json { "name": "walk dog", "isComplete": true } ###Nyisd meg az alkalmazást.
Válassza a Kérés küldése hivatkozást, amely a
POSTkérelemsor felett található.
A POST kérést a rendszer elküldi az alkalmazásnak, és a válasz megjelenik a Válasz panelen.
A hely fejlécének URI-jának tesztelése
Tesztelje az alkalmazást a GET végpontok böngészőből való meghívásával vagy Endpoints Explorerhasználatával. Az alábbi lépések a Endpoints Explorer-hez tartoznak.
Az Endpoints Explorerterületen kattintson a jobb gombbal az első GET végpontra, és válassza a Kérés létrehozásalehetőséget.
A következő tartalom lesz hozzáadva a
TodoApi.httpfájlhoz:GET {{TodoApi_HostAddress}}/api/todoitems ###Válassza a Kérés küldése hivatkozást, amely az új
GETkérelemsor felett található.A GET kérést a rendszer elküldi az alkalmazásnak, és a válasz megjelenik a Válasz panelen.
A válasz törzse a következő JSON-hoz hasonló:
[ { "id": 1, "name": "walk dog", "isComplete": true } ]Az Endpoints Explorerterületen kattintson a jobb gombbal a
/api/todoitems/{id}GET végpontra, és válassza a Kérés létrehozásalehetőséget. A következő tartalom lesz hozzáadva aTodoApi.httpfájlhoz:@id=0 GET {{TodoApi_HostAddress}}/api/todoitems/{{id}} ###Rendeld hozzá a
{@id}-t a1-hoz (a0helyett).Válassza a Kérés küldése hivatkozást, amely az új GET kérelemsor felett található.
A GET kérést a rendszer elküldi az alkalmazásnak, és a válasz megjelenik a Válasz panelen.
A válasz törzse a következő JSON-hoz hasonló:
{ "id": 1, "name": "walk dog", "isComplete": true }
A GET metódusok vizsgálata
Két GET-végpont implementálva van:
GET /api/todoitemsGET /api/todoitems/{id}
Az előző szakasz egy példát mutatott az útvonalra /api/todoitems/{id} .
Kövesse a POST utasításait egy másik teendőelem hozzáadásához, majd tesztelje az útvonalat a /api/todoitems Swagger használatával.
Ez az alkalmazás memórián belüli adatbázist használ. Ha az alkalmazás le van állítva és elindult, az előző GET kérés nem ad vissza adatokat. Ha az alkalmazás nem ad vissza adatot, küldjön POST adatokat az alkalmazásnak.
Útválasztás és URL-útvonalak
Az [HttpGet] attribútum egy kérésre válaszoló metódust HTTP GET jelöl. Az egyes metódusok URL-elérési útja a következőképpen jön létre:
Kezdje a sablonsztringgel a vezérlő attribútumában
Route:[Route("api/[controller]")] [ApiController] public class TodoItemsController : ControllerBaseCserélje le
[controller]a vezérlő nevét, amely konvenció szerint a vezérlőosztály neve mínusz a "Controller" utótag. Ebben a mintában a vezérlőosztály neve TodoItemsController, így a vezérlő neve "TodoItems". ASP.NET Core útválasztás nem érzékeny a kis- és nagybetűkre.Ha az
[HttpGet]attribútum rendelkezik útvonalsablonnal (például[HttpGet("products")]), fűzze hozzá az elérési úthoz. Ez a minta nem használ sablont. További információ: Attribútum-útválasztás Http[Verb] attribútumokkal.
Az alábbi GetTodoItem metódus "{id}" a to-do elem egyedi azonosítójának helyőrző változója. Amikor meghívják GetTodoItem, az URL-címben "{id}" értéke megadva a metódus id paraméterében.
[HttpGet("{id}")]
public async Task<ActionResult<TodoItem>> GetTodoItem(long id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
return todoItem;
}
Visszaadott értékek
A `GetTodoItems` és `GetTodoItem` metódusok visszatérési típusa ActionResult<T> típusú. ASP.NET Core automatikusan szerializálja az objektumot JSON formátumra, és beírja a JSON-t a válaszüzenet törzsébe. A visszatérési típus válaszkódja 200 OK, feltéve, hogy nincsenek kezeletlen kivételek. A nem kezelt kivételek 5xx-hibákká lesznek lefordítva.
ActionResult A visszatérési típusok a HTTP-állapotkódok széles skáláját jelölhetik. A GetTodoItem például két különböző állapotértéket adhat vissza:
- Ha egyetlen elem sem felel meg a kért azonosítónak, a metódus egy 404-NotFound hibakódot ad vissza.
- Ellenkező esetben a metódus egy JSON-válasz törzsével adja vissza a 200-t. Az
itemeredmény visszaadása eseténHTTP 200választ kapunk.
A PutTodoItem metódus
Vizsgálja meg a PutTodoItem metódust:
[HttpPut("{id}")]
public async Task<IActionResult> PutTodoItem(long id, TodoItem todoItem)
{
if (id != todoItem.Id)
{
return BadRequest();
}
_context.Entry(todoItem).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!TodoItemExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
PutTodoItem hasonló PostTodoItem-hoz/-hez, kivéve, hogy HTTP PUT-t használ. A válasz 204 (nincs tartalom). A HTTP-specifikáció szerint a PUT kéréshez az ügyfélnek a teljes frissített entitást kell elküldenie, nem csak a módosításokat. A részleges frissítések támogatásához használja HTTP PATCH.
A PutTodoItem metódus tesztelése
Ez a minta egy memórián belüli adatbázist használ, amelyet az alkalmazás minden indításakor inicializálni kell. Az adatbázisnak tartalmaznia kell egy elemet, mielőtt PUT-hívást kezdeményezne. A GET hívásával győződjön meg arról, hogy van egy elem az adatbázisban, mielőtt PUT-hívást kezdeményez.
Használja a PUT metódust az TodoItem azonosítóval rendelkező elem frissítéséhez, amelynek Id = 1, és állítsa be a nevét "feed fish". Vegye figyelembe, hogy a válasz HTTP 204 No Content.
Az Endpoints Explorer-ben kattintson a jobb gombbal a PUT végpontra, és válassza a Kérés létrehozásalehetőséget.
A következő tartalom lesz hozzáadva a
TodoApi.httpfájlhoz:PUT {{TodoApi_HostAddress}}/api/todoitems/{{id}} Content-Type: application/json { //TodoItem } ###A PUT kérelemsorban cserélje le a
{{id}}1.Cserélje le a
//TodoItemhelyőrzőt a következő sorokra:PUT {{TodoApi_HostAddress}}/api/todoitems/1 Content-Type: application/json { "id": 1, "name": "feed fish", "isComplete": false }Válassza a Kérés küldése hivatkozást, amely az új PUT kérelemsor felett található.
A PUT kérést a rendszer elküldi az alkalmazásnak, és a válasz megjelenik a Válasz panelen. A válasz törzse üres, az állapotkód pedig 204.
A DeleteTodoItem metódus
Vizsgálja meg a DeleteTodoItem metódust:
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteTodoItem(long id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
_context.TodoItems.Remove(todoItem);
await _context.SaveChangesAsync();
return NoContent();
}
A DeleteTodoItem metódus tesztelése
DELETE A metódus használatával törölheti az TodoItem azonosító = 1 azonosítót. Vegye figyelembe, hogy a válasz HTTP 204 No Content.
Az Endpoints Explorerterületen kattintson a jobb gombbal a DELETE végpontra, és válassza a Kérés létrehozásalehetőséget.
Hozzá van adva egy DELETE kérés a
TodoApi.http-hoz.A
{{id}}helyett1-et használjon a DELETE kérelemsorban. A DELETE kérésnek a következő példához hasonlóan kell kinéznie:DELETE {{TodoApi_HostAddress}}/api/todoitems/{{id}} ###Válassza a Küldési kérelem hivatkozást a DELETE kéréshez.
A DELETE kérést a rendszer elküldi az alkalmazásnak, és a válasz megjelenik a Válasz panelen. A válasz törzse üres, az állapotkód pedig 204.
Tesztelés más eszközökkel
Számos más eszköz is használható a webes API-k tesztelésére, például:
- http-repl
-
curl. Swagger a(z)
curlhasználja, és megjeleníti azcurlparancsokat, amelyeket elküld. - Fiddler
Túlküldés megakadályozása
A mintaalkalmazás jelenleg a teljes TodoItem objektumot teszi elérhetővé. Az éles alkalmazások általában szabályozzák az adatok bevitelét és visszaadását a modell egy részhalmazával. Ennek több oka is van, és a biztonság a legfontosabb. A modell részhalmazát általában adatátviteli objektumnak (DTO), bemeneti modellnek vagy nézetmodellnek nevezzük. Ebben az oktatóanyagban DTO-t használunk.
A DTO a következő célra használható:
- A túlküldés megakadályozása.
- Elrejtheti az ügyfelek által nem megtekinteni kívánt tulajdonságokat.
- Kihagy néhány tulajdonságot a hasznos adat méretének csökkentése érdekében.
- Beágyazott objektumokat tartalmazó objektumdiagramok simítása. Az egyszerűsített objektum gráfok kényelmesebbek lehetnek az ügyfelek számára.
A DTO-megközelítés bemutatásához frissítse a TodoItem osztályt egy titkos mezőre:
namespace TodoApi.Models;
public class TodoItem
{
public long Id { get; set; }
public string? Name { get; set; }
public bool IsComplete { get; set; }
public string? Secret { get; set; }
}
A titkos mezőt el kell rejteni az alkalmazás elől, de egy felügyeleti alkalmazás dönthet úgy, hogy közzéteszi.
Ellenőrizze, hogy közzéteheti és lekérheti-e a titkos kód mezőt.
DTO-modell létrehozása Modellek/TodoItemsDTO.cs fájlban:
namespace TodoApi.Models;
public class TodoItemDTO
{
public long Id { get; set; }
public string? Name { get; set; }
public bool IsComplete { get; set; }
}
Frissítse a TodoItemsController használatát a TodoItemDTO-ra:
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using TodoApi.Models;
namespace TodoApi.Controllers;
[Route("api/[controller]")]
[ApiController]
public class TodoItemsController : ControllerBase
{
private readonly TodoContext _context;
public TodoItemsController(TodoContext context)
{
_context = context;
}
// GET: api/TodoItems
[HttpGet]
public async Task<ActionResult<IEnumerable<TodoItemDTO>>> GetTodoItems()
{
return await _context.TodoItems
.Select(x => ItemToDTO(x))
.ToListAsync();
}
// GET: api/TodoItems/5
// <snippet_GetByID>
[HttpGet("{id}")]
public async Task<ActionResult<TodoItemDTO>> GetTodoItem(long id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
return ItemToDTO(todoItem);
}
// </snippet_GetByID>
// PUT: api/TodoItems/5
// To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
// <snippet_Update>
[HttpPut("{id}")]
public async Task<IActionResult> PutTodoItem(long id, TodoItemDTO todoDTO)
{
if (id != todoDTO.Id)
{
return BadRequest();
}
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
todoItem.Name = todoDTO.Name;
todoItem.IsComplete = todoDTO.IsComplete;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException) when (!TodoItemExists(id))
{
return NotFound();
}
return NoContent();
}
// </snippet_Update>
// POST: api/TodoItems
// To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
// <snippet_Create>
[HttpPost]
public async Task<ActionResult<TodoItemDTO>> PostTodoItem(TodoItemDTO todoDTO)
{
var todoItem = new TodoItem
{
IsComplete = todoDTO.IsComplete,
Name = todoDTO.Name
};
_context.TodoItems.Add(todoItem);
await _context.SaveChangesAsync();
return CreatedAtAction(
nameof(GetTodoItem),
new { id = todoItem.Id },
ItemToDTO(todoItem));
}
// </snippet_Create>
// DELETE: api/TodoItems/5
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteTodoItem(long id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
_context.TodoItems.Remove(todoItem);
await _context.SaveChangesAsync();
return NoContent();
}
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
};
}
Ellenőrizze, hogy nem tudja-e közzétenni vagy lekérni a titkos kód mezőt.
A webes API meghívása JavaScript használatával
Lásd az oktatóanyagot: ASP.NET Core webes API meghívása JavaScript használatával.
Webes API videósorozat
Lásd Videó: Webes API-k kezdők számára.
Vállalati webalkalmazás-minták
A megbízható, biztonságos, teljesíthető, tesztelhető és méretezhető ASP.NET Core-alkalmazás létrehozásával kapcsolatos útmutatásért tekintse meg Vállalati webalkalmazás-mintákcímű témakört. Rendelkezésre áll egy teljesen felhasználásra kész példawebalkalmazás, amely implementálja a mintákat.
Hitelesítési támogatás hozzáadása webes API-hoz
ASP.NET Core Identity felhasználói felület (UI) bejelentkezési funkciót ad hozzá ASP.NET Core-webalkalmazásokhoz. A webes API-k és SPA-k védelméhez használja az alábbiak egyikét:
A Duende Identity Server egy OpenID Connect- és OAuth 2.0-keretrendszer ASP.NET Core-hoz. A Duende Identity Server a következő biztonsági funkciókat teszi lehetővé:
- Hitelesítés szolgáltatásként (AaaS)
- Egyszeri bejelentkezés/kijelentkezés (SSO) több alkalmazástípuson keresztül
- Hozzáférés-vezérlés API-khoz
- Szövetségi átjáró
Important
Duende Software esetleg licencdíjat kérhet a Duende Identity Server üzemeltetési használatáért. További információ: Migrálás ASP.NET Core-ból .NET 5-ről .NET 6-ra.
További információ: Duende Identity Server dokumentációja (Duende Software webhely).
Közzététel az Azure-ban
Az Azure-ban való üzembe helyezésről további információért lásd: Gyorsútmutató: ASP.NET webalkalmazás üzembe helyezése.
További erőforrások
Az oktatóanyag mintakódjának megtekintése vagy letöltése. Tekintse meg , hogyan töltheti le.
További információt a következő források tartalmaznak:
- Webes API-k létrehozása az ASP.NET Core segítségével
- Oktatóanyag: Minimális API létrehozása ASP.NET Core
- A létrehozott OpenAPI-dokumentumok használata
- ASP.NET Core webes API dokumentáció Swaggerrel / OpenAPI-val
- Razor Az Entity Framework Core lapjai a ASP.NET Core-ban – 1. oktatóanyag a 8-ból
- ASP.NET Core vezérlőműveleteinek útválasztása
- A vezérlőműveletek visszatérési típusai az ASP.NET Core webes API-ban
- ASP.NET Core-alkalmazások üzembe helyezése az Azure App Service-
- ASP.NET Core tárhely létrehozása és üzembe helyezése
- Webes API létrehozása a ASP.NET Core használatával
Ez az oktatóanyag az adatbázist használó vezérlőalapú webes API létrehozásának alapjait mutatja be. Az API-k ASP.NET Core-ban való létrehozásának másik módszere a minimális API-k létrehozása. Ha segítségre van szüksége a minimális API-k és a vezérlőalapú API-k közötti választáshoz, tekintse meg API-k áttekintését. A minimális API-k létrehozásáról a következő oktatóanyagban olvashat: Minimális API létrehozása ASP.NET Core használatával.
Overview
Ez az oktatóanyag a következő API-t hozza létre:
| API | Description | A kérés tartalma | Válasz törzse |
|---|---|---|---|
GET /api/todoitems |
Az összes to-do elem lekérése | None | teendők tömbje |
GET /api/todoitems/{id} |
Elem lekérése azonosító alapján | None | Teendő elem |
POST /api/todoitems |
Új elem hozzáadása | Teendő elem | Teendő elem |
PUT /api/todoitems/{id} |
Meglévő elem frissítése | Teendő elem | None |
DELETE /api/todoitems/{id} |
Elem törlése | None | None |
Az alábbi ábrán az alkalmazás tervezése látható.
Prerequisites
Visual Studio 2022 az ASP.NET és webfejlesztési feladatokkal.
Webes projekt létrehozása
- A Fájl menüben válassza a Új>Projektlehetőséget.
- A keresőmezőbe írja be a Web API.
- Válassza a ASP.NET Core Web API sablont, majd válassza a Következőlehetőséget.
- Az új projekt konfigurálása párbeszédpanelen nevezze el a todoApi nevű projektet, és válassza a Tovább gombot.
- A További információk párbeszédpanelen:
- Győződjön meg arról, hogy a keretrendszer.NET 8.0 (hosszú távú támogatás).
- Győződjön meg arról, hogy a Vezérlők használata (a minimális API-k használatához való törlés) jelölőnégyzet be van jelölve, be van jelölve.
- Ellenőrizze, hogy be van-e jelölve az OpenAPI-támogatás engedélyezése jelölőnégyzet.
- Válassza a Create gombot.
NuGet-csomag hozzáadása
Az oktatóanyagban használt adatbázis támogatásához NuGet-csomagot kell hozzáadni.
- Az Eszközök menüben válassza a NuGet Package Manager > Megoldáshoz készült NuGet-csomagok kezeléselehetőséget.
- Válassza a Tallózás lapot.
- Írja be Microsoft.EntityFrameworkCore.InMemory a keresőmezőbe, majd válassza a
Microsoft.EntityFrameworkCore.InMemory. - Jelölje be a Project jelölőnégyzetet a jobb oldali panelen, majd válassza a Telepítéslehetőséget.
Note
A csomagok .NET-alkalmazásokhoz való hozzáadásáról a Csomagok telepítése és kezeléseCsomaghasználati munkafolyamat (NuGet-dokumentáció)című cikkben talál útmutatást. Ellenőrizze a megfelelő csomagverziókat a NuGet.org.
A projekt tesztelése
A projektsablon létrehoz egy WeatherForecast API-t a Swagger támogatásával.
Nyomja le a Ctrl+F5 billentyűkombinációt a hibakereső nélküli futtatáshoz.
A Visual Studio az alábbi párbeszédpanelt jeleníti meg, ha egy projekt még nincs ssl használatára konfigurálva:
Válassza Igen lehetőséget, ha megbízik az IIS Express SSL-tanúsítványban.
A következő párbeszédpanel jelenik meg:
Válassza Igen lehetőséget, ha elfogadja, hogy megbízik a fejlesztési tanúsítványban.
A Firefox böngésző megbízhatóságáról további információt a Firefox SEC_ERROR_INADEQUATE_KEY_USAGE tanúsítványhibacímű témakörben talál.
A Visual Studio elindítja az alapértelmezett böngészőt, és a https://localhost:<port>/swagger/index.html címre navigál, ahol a <port> projekt létrehozásakor egy véletlenszerűen kiválasztott portszám.
Megjelenik a Swagger oldal /swagger/index.html . Válassza a GET>Próbálja ki>Végrehajtás lehetőséget. Az oldal a következőt jeleníti meg:
- A WeatherForecast API tesztelésére vonatkozó Curl-parancs .
- A WeatherForecast API tesztelésének URL-címe.
- A válaszkód, a törzs és a fejlécek.
- Egy legördülő lista médiatípusokkal, valamint a példaértékkel és sémával.
Ha a Swagger-oldal nem jelenik meg, tekintse meg ezt a GitHub-problémát.
A Swagger hasznos dokumentációkat és súgólapokat hoz létre a webes API-khoz. Ez az oktatóanyag a Swagger használatával teszteli az alkalmazást. A Swaggerrel kapcsolatos további információkért tekintse meg ASP.NET Core webes API-dokumentációját a Swagger/OpenAPI használatával.
Másolja és illessze be a kérés URL-címét a böngészőben: https://localhost:<port>/weatherforecast
A következő példához hasonló JSON-t ad vissza:
[
{
"date": "2019-07-16T19:04:05.7257911-06:00",
"temperatureC": 52,
"temperatureF": 125,
"summary": "Mild"
},
{
"date": "2019-07-17T19:04:05.7258461-06:00",
"temperatureC": 36,
"temperatureF": 96,
"summary": "Warm"
},
{
"date": "2019-07-18T19:04:05.7258467-06:00",
"temperatureC": 39,
"temperatureF": 102,
"summary": "Cool"
},
{
"date": "2019-07-19T19:04:05.7258471-06:00",
"temperatureC": 10,
"temperatureF": 49,
"summary": "Bracing"
},
{
"date": "2019-07-20T19:04:05.7258474-06:00",
"temperatureC": -1,
"temperatureF": 31,
"summary": "Chilly"
}
]
Modellosztály hozzáadása
A modell olyan osztályok készlete, amelyek az alkalmazás által kezelt adatokat képviselik. Az alkalmazás modellje az TodoItem osztály.
- A Megoldáskezelő-ben kattintson a jobb gombbal a projektre. Válassza >Új mappa hozzáadásalehetőséget. Nevezze el a mappát
Models. - Kattintson a jobb gombbal a
Modelsmappára, és válassza a Hozzáadás>Osztályt lehetőséget. Nevezze el a TodoItem osztályt, és válassza a Hozzáadás lehetőséget. - Cserélje le a sablonkódot a következőre:
namespace TodoApi.Models;
public class TodoItem
{
public long Id { get; set; }
public string? Name { get; set; }
public bool IsComplete { get; set; }
}
A Id tulajdonság egy relációs adatbázis egyedi kulcsaként működik.
Modelosztályok bárhová elhelyezhetők a projektben, de a Models mappát hagyományosan az előírások szerint használják.
Adatbázis-környezet hozzáadása
Az adatbázis-környezet az a fő osztály, amely koordinálja az entitás-keretrendszer funkcióit egy adatmodellhez. Ez az osztály az osztályból Microsoft.EntityFrameworkCore.DbContext származtatva jön létre.
- Kattintson a jobb gombbal a
Modelsmappára, és válassza a Hozzáadás>Osztályt lehetőséget. Nevezze el a TodoContext osztályt, és kattintson a Hozzáadás gombra.
Írja be a következő kódot:
using Microsoft.EntityFrameworkCore; namespace TodoApi.Models; public class TodoContext : DbContext { public TodoContext(DbContextOptions<TodoContext> options) : base(options) { } public DbSet<TodoItem> TodoItems { get; set; } = null!; }
Az adatbázis-környezet regisztrálása
Az ASP.NET Core-ban az olyan szolgáltatásokat, mint a DB-környezet, regisztrálni kell a függőséginjektálási (DI) tárolóban. A tároló biztosítja a szolgáltatást a vezérlők számára.
Frissítse Program.cs a következő kiemelt kóddal:
using Microsoft.EntityFrameworkCore;
using TodoApi.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddDbContext<TodoContext>(opt =>
opt.UseInMemoryDatabase("TodoList"));
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Az előző kód:
-
usingirányelveket ad hozzá. - Hozzáadja az adatbázis-környezetet a DI-tárolóhoz.
- Megadja, hogy az adatbázis-környezet memórián belüli adatbázist használjon.
Vezérlő állványzata
Kattintson a jobb gombbal a
Controllersmappára.Válassza a Hozzáadás lehetőséget>New Scaffolded Item.
Válassza a műveletekkel rendelkező API-vezérlőt az Entity Framework használatával, majd válassza a Hozzáadás lehetőséget.
Az Api Controller hozzáadása műveletekkel az Entity Framework párbeszédpanelen :
- Válassza a TodoItem (TodoApi.Models) lehetőséget a Modell osztályban.
- Válassza a TodoContext (TodoApi.Models) lehetőséget az Adatkörnyezet osztályban.
- Válassza a Hozzáadás lehetőséget.
Ha az állványozási művelet sikertelen, kattintson a Hozzáadás gombra, hogy újra megpróbálja az állványozást.
A létrehozott kód:
- Az osztály megjelölése az
[ApiController]attribútummal. Ez az attribútum azt jelzi, hogy a vezérlő válaszol a webes API-kérésekre. Az attribútum által lehetővé tetső konkrét viselkedésekkel kapcsolatos információkért lásd: Webes API-k létrehozása ASP.NET Core használatával. - A DI használatával injektálja az adatbázis-környezetet (
TodoContext) a vezérlőbe. Az adatbázis-környezet a vezérlőben található CRUD-metódusok mindegyikében használatos.
A ASP.NET Core-sablonok a következőhöz:
- A nézetekkel rendelkező vezérlők szerepelnek
[action]az útvonalsablonban. - Az API-vezérlők nem szerepelnek
[action]az útvonalsablonban.
Ha a [action] jogkivonat nem szerepel az útvonalsablonban, a művelet neve (metódus neve) nem szerepel a végpontban. Vagyis a művelet társított metódusneve nem szerepel az egyező útvonalban.
A PostTodoItem létrehozási metódus frissítése
Frissítse a visszatérési utasítást a PostTodoItem úgy, hogy a nameof operátort használja:
[HttpPost]
public async Task<ActionResult<TodoItem>> PostTodoItem(TodoItem todoItem)
{
_context.TodoItems.Add(todoItem);
await _context.SaveChangesAsync();
// return CreatedAtAction("GetTodoItem", new { id = todoItem.Id }, todoItem);
return CreatedAtAction(nameof(GetTodoItem), new { id = todoItem.Id }, todoItem);
}
Az előző kód egy HTTP POST metódus, amelyet az [HttpPost] attribútum jelez. A metódus lekéri a TodoItem értékét a HTTP-kérés törzséből.
További információ: Attribútum-útválasztás Http[Verb] attribútumokkal.
A CreatedAtAction módszer:
- Ha sikeres, egy HTTP 201-állapotkódot ad vissza.
HTTP 201egy olyan metódus szokásos válaszaHTTP POST, amely új erőforrást hoz létre a kiszolgálón. -
Hely fejlécet ad hozzá a válaszhoz. A
Locationfejléc az újonnan létrehozott to-do elem URI-ját adja meg. További információ: 10.2.2 201 Létrehozás. - A
GetTodoItemfejléc URI-jának létrehozásához aLocationműveletre hivatkozik. A C#nameof-kulcsszóval elkerülhető, hogy a hívásbanCreatedAtActiona művelet neve nehezen kódolódjon.
PostTodoItem tesztelése
Az alkalmazás futtatásához nyomja le a Ctrl+F5 billentyűkombinációt.
A Swagger böngészőablakában válassza a POST /api/TodoItems lehetőséget, majd válassza a Kipróbálás lehetőséget.
A Kérelem törzs beviteli ablakában frissítse a JSON-t. Például
{ "name": "walk dog", "isComplete": true }Válassza a Végrehajtás lehetőséget
A hely fejlécének URI-jának tesztelése
Az előző POST-ben a Swagger felhasználói felülete megjeleníti a hely fejlécét a Válasz fejlécek alatt. Például: location: https://localhost:7260/api/TodoItems/1. A hely fejléce megmutatja a létrehozott erőforrás URI-ját.
A hely fejlécének tesztelése:
A Swagger böngészőablakában válassza a GET /api/TodoItems/{id} lehetőséget, majd válassza a Kipróbálás lehetőséget.
Írja be
1a beviteliidmezőbe, majd válassza a Végrehajtás lehetőséget.
A GET metódusok vizsgálata
Két GET-végpont implementálva van:
GET /api/todoitemsGET /api/todoitems/{id}
Az előző szakasz egy példát mutatott az útvonalra /api/todoitems/{id} .
Kövesse a POST utasításait egy másik teendőelem hozzáadásához, majd tesztelje az útvonalat a /api/todoitems Swagger használatával.
Ez az alkalmazás memórián belüli adatbázist használ. Ha az alkalmazás le van állítva és elindult, az előző GET kérés nem ad vissza adatokat. Ha az alkalmazás nem ad vissza adatot, küldjön POST adatokat az alkalmazásnak.
Útválasztás és URL-útvonalak
Az [HttpGet] attribútum egy kérésre válaszoló metódust HTTP GET jelöl. Az egyes metódusok URL-elérési útja a következőképpen jön létre:
Kezdje a sablonsztringgel a vezérlő attribútumában
Route:[Route("api/[controller]")] [ApiController] public class TodoItemsController : ControllerBaseCserélje le
[controller]a vezérlő nevét, amely konvenció szerint a vezérlőosztály neve mínusz a "Controller" utótag. Ebben a mintában a vezérlőosztály neve TodoItemsController, így a vezérlő neve "TodoItems". ASP.NET Core útválasztás nem érzékeny a kis- és nagybetűkre.Ha az
[HttpGet]attribútum rendelkezik útvonalsablonnal (például[HttpGet("products")]), fűzze hozzá az elérési úthoz. Ez a minta nem használ sablont. További információ: Attribútum-útválasztás Http[Verb] attribútumokkal.
Az alábbi GetTodoItem metódus "{id}" a to-do elem egyedi azonosítójának helyőrző változója. Amikor meghívják GetTodoItem, az URL-címben "{id}" értéke megadva a metódus id paraméterében.
[HttpGet("{id}")]
public async Task<ActionResult<TodoItem>> GetTodoItem(long id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
return todoItem;
}
Visszaadott értékek
A `GetTodoItems` és `GetTodoItem` metódusok visszatérési típusa ActionResult<T> típusú. ASP.NET Core automatikusan szerializálja az objektumot JSON formátumra, és beírja a JSON-t a válaszüzenet törzsébe. A visszatérési típus válaszkódja 200 OK, feltéve, hogy nincsenek kezeletlen kivételek. A nem kezelt kivételek 5xx-hibákká lesznek lefordítva.
ActionResult A visszatérési típusok a HTTP-állapotkódok széles skáláját jelölhetik. A GetTodoItem például két különböző állapotértéket adhat vissza:
- Ha egyetlen elem sem felel meg a kért azonosítónak, a metódus egy 404-NotFound hibakódot ad vissza.
- Ellenkező esetben a metódus egy JSON-válasz törzsével adja vissza a 200-t. Az
itemeredmény visszaadása eseténHTTP 200választ kapunk.
A PutTodoItem metódus
Vizsgálja meg a PutTodoItem metódust:
[HttpPut("{id}")]
public async Task<IActionResult> PutTodoItem(long id, TodoItem todoItem)
{
if (id != todoItem.Id)
{
return BadRequest();
}
_context.Entry(todoItem).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!TodoItemExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
PutTodoItem hasonló PostTodoItem-hoz/-hez, kivéve, hogy HTTP PUT-t használ. A válasz 204 (nincs tartalom). A HTTP-specifikáció szerint a PUT kéréshez az ügyfélnek a teljes frissített entitást kell elküldenie, nem csak a módosításokat. A részleges frissítések támogatásához használja HTTP PATCH.
A PutTodoItem metódus tesztelése
Ez a minta egy memórián belüli adatbázist használ, amelyet az alkalmazás minden indításakor inicializálni kell. Az adatbázisnak tartalmaznia kell egy elemet, mielőtt PUT-hívást kezdeményezne. A GET hívásával győződjön meg arról, hogy van egy elem az adatbázisban, mielőtt PUT-hívást kezdeményez.
A Swagger felhasználói felületén kattintson a PUT gombra, hogy frissítse az azonosítóval 1 rendelkező TodoItem-t, és állítsa annak nevét "feed fish"-re. Vegye figyelembe, hogy a válasz HTTP 204 No Content.
A DeleteTodoItem metódus
Vizsgálja meg a DeleteTodoItem metódust:
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteTodoItem(long id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
_context.TodoItems.Remove(todoItem);
await _context.SaveChangesAsync();
return NoContent();
}
A DeleteTodoItem metódus tesztelése
A Swagger UI-ban törölje azt a TodoItem, amelynek azonosítója 1. Vegye figyelembe, hogy a válasz HTTP 204 No Content.
Tesztelés más eszközökkel
Számos más eszköz is használható a webes API-k tesztelésére, például:
- Visual Studio Endpoints Explorer és .http fájlok
- http-repl
-
curl. Swagger a(z)
curlhasználja, és megjeleníti azcurlparancsokat, amelyeket elküld. - Fiddler
További információk:
Túlküldés megakadályozása
A mintaalkalmazás jelenleg a teljes TodoItem objektumot teszi elérhetővé. Az éles alkalmazások általában szabályozzák az adatok bevitelét és visszaadását a modell egy részhalmazával. Ennek több oka is van, és a biztonság a legfontosabb. A modell részhalmazát általában adatátviteli objektumnak (DTO), bemeneti modellnek vagy nézetmodellnek nevezzük. Ebben az oktatóanyagban DTO-t használunk.
A DTO a következő célra használható:
- A túlküldés megakadályozása.
- Elrejtheti az ügyfelek által nem megtekinteni kívánt tulajdonságokat.
- Kihagy néhány tulajdonságot a hasznos adat méretének csökkentése érdekében.
- Beágyazott objektumokat tartalmazó objektumdiagramok simítása. Az egyszerűsített objektum gráfok kényelmesebbek lehetnek az ügyfelek számára.
A DTO-megközelítés bemutatásához frissítse a TodoItem osztályt egy titkos mezőre:
namespace TodoApi.Models
{
public class TodoItem
{
public long Id { get; set; }
public string? Name { get; set; }
public bool IsComplete { get; set; }
public string? Secret { get; set; }
}
}
A titkos mezőt el kell rejteni az alkalmazás elől, de egy felügyeleti alkalmazás dönthet úgy, hogy közzéteszi.
Ellenőrizze, hogy közzéteheti és lekérheti-e a titkos kód mezőt.
DTO-modell létrehozása:
namespace TodoApi.Models;
public class TodoItemDTO
{
public long Id { get; set; }
public string? Name { get; set; }
public bool IsComplete { get; set; }
}
Frissítse a TodoItemsController használatát a TodoItemDTO-ra:
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using TodoApi.Models;
namespace TodoApi.Controllers;
[Route("api/[controller]")]
[ApiController]
public class TodoItemsController : ControllerBase
{
private readonly TodoContext _context;
public TodoItemsController(TodoContext context)
{
_context = context;
}
// GET: api/TodoItems
[HttpGet]
public async Task<ActionResult<IEnumerable<TodoItemDTO>>> GetTodoItems()
{
return await _context.TodoItems
.Select(x => ItemToDTO(x))
.ToListAsync();
}
// GET: api/TodoItems/5
// <snippet_GetByID>
[HttpGet("{id}")]
public async Task<ActionResult<TodoItemDTO>> GetTodoItem(long id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
return ItemToDTO(todoItem);
}
// </snippet_GetByID>
// PUT: api/TodoItems/5
// To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
// <snippet_Update>
[HttpPut("{id}")]
public async Task<IActionResult> PutTodoItem(long id, TodoItemDTO todoDTO)
{
if (id != todoDTO.Id)
{
return BadRequest();
}
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
todoItem.Name = todoDTO.Name;
todoItem.IsComplete = todoDTO.IsComplete;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException) when (!TodoItemExists(id))
{
return NotFound();
}
return NoContent();
}
// </snippet_Update>
// POST: api/TodoItems
// To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
// <snippet_Create>
[HttpPost]
public async Task<ActionResult<TodoItemDTO>> PostTodoItem(TodoItemDTO todoDTO)
{
var todoItem = new TodoItem
{
IsComplete = todoDTO.IsComplete,
Name = todoDTO.Name
};
_context.TodoItems.Add(todoItem);
await _context.SaveChangesAsync();
return CreatedAtAction(
nameof(GetTodoItem),
new { id = todoItem.Id },
ItemToDTO(todoItem));
}
// </snippet_Create>
// DELETE: api/TodoItems/5
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteTodoItem(long id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
_context.TodoItems.Remove(todoItem);
await _context.SaveChangesAsync();
return NoContent();
}
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
};
}
Ellenőrizze, hogy nem tudja-e közzétenni vagy lekérni a titkos kód mezőt.
A webes API meghívása JavaScript használatával
Lásd az oktatóanyagot: ASP.NET Core webes API meghívása JavaScript használatával.
Webes API videósorozat
Lásd Videó: Webes API-k kezdők számára.
Vállalati webalkalmazás-minták
A megbízható, biztonságos, teljesíthető, tesztelhető és méretezhető ASP.NET Core-alkalmazás létrehozásával kapcsolatos útmutatásért tekintse meg Vállalati webalkalmazás-mintákcímű témakört. Rendelkezésre áll egy teljesen felhasználásra kész példawebalkalmazás, amely implementálja a mintákat.
Hitelesítési támogatás hozzáadása webes API-hoz
ASP.NET Core Identity felhasználói felület (UI) bejelentkezési funkciót ad hozzá ASP.NET Core-webalkalmazásokhoz. A webes API-k és SPA-k védelméhez használja az alábbiak egyikét:
A Duende Identity Server egy OpenID Connect- és OAuth 2.0-keretrendszer ASP.NET Core-hoz. A Duende Identity Server a következő biztonsági funkciókat teszi lehetővé:
- Hitelesítés szolgáltatásként (AaaS)
- Egyszeri bejelentkezés/kijelentkezés (SSO) több alkalmazástípuson keresztül
- Hozzáférés-vezérlés API-khoz
- Szövetségi átjáró
Important
Duende Software esetleg licencdíjat kérhet a Duende Identity Server üzemeltetési használatáért. További információ: Migrálás ASP.NET Core-ból .NET 5-ről .NET 6-ra.
További információ: Duende Identity Server dokumentációja (Duende Software webhely).
Közzététel az Azure-ban
Az Azure-ban való üzembe helyezésről további információért lásd: Gyorsútmutató: ASP.NET webalkalmazás üzembe helyezése.
További erőforrások
Az oktatóanyag mintakódjának megtekintése vagy letöltése. Tekintse meg , hogyan töltheti le.
További információt a következő források tartalmaznak:
- Webes API-k létrehozása az ASP.NET Core segítségével
- Oktatóanyag: Minimális API létrehozása ASP.NET Core
- ASP.NET Core webes API dokumentáció Swaggerrel / OpenAPI-val
- Razor Az Entity Framework Core lapjai a ASP.NET Core-ban – 1. oktatóanyag a 8-ból
- ASP.NET Core vezérlőműveleteinek útválasztása
- A vezérlőműveletek visszatérési típusai az ASP.NET Core webes API-ban
- ASP.NET Core-alkalmazások üzembe helyezése az Azure App Service-
- ASP.NET Core tárhely létrehozása és üzembe helyezése
- Webes API létrehozása a ASP.NET Core használatával
Ez az oktatóanyag az adatbázist használó vezérlőalapú webes API létrehozásának alapjait mutatja be. Az API-k ASP.NET Core-ban való létrehozásának másik módszere a minimális API-k létrehozása. Ha segítségre van szüksége a minimális API-k és a vezérlőalapú API-k közötti választáshoz, tekintse meg API-k áttekintését. A minimális API-k létrehozásáról a következő oktatóanyagban olvashat: Minimális API létrehozása ASP.NET Core használatával.
Overview
Ez az oktatóanyag a következő API-t hozza létre:
| API | Description | A kérés tartalma | Válasz törzse |
|---|---|---|---|
GET /api/todoitems |
Az összes to-do elem lekérése | None | teendők tömbje |
GET /api/todoitems/{id} |
Elem lekérése azonosító alapján | None | Teendő elem |
POST /api/todoitems |
Új elem hozzáadása | Teendő elem | Teendő elem |
PUT /api/todoitems/{id} |
Meglévő elem frissítése | Teendő elem | None |
DELETE /api/todoitems/{id} |
Elem törlése | None | None |
Az alábbi ábrán az alkalmazás tervezése látható.
Prerequisites
Visual Studio 2022 az ASP.NET és webfejlesztési feladatokkal.
Webes projekt létrehozása
- A Fájl menüben válassza a Új>Projektlehetőséget.
- A keresőmezőbe írja be a Web API.
- Válassza a ASP.NET Core Web API sablont, majd válassza a Következőlehetőséget.
- Az új projekt konfigurálása párbeszédpanelen nevezze el a todoApi nevű projektet, és válassza a Tovább gombot.
- A További információk párbeszédpanelen:
- Győződjön meg arról, hogy a keretrendszer.NET 8.0 (hosszú távú támogatás).
- Győződjön meg arról, hogy a Vezérlők használata (a minimális API-k használatához való törlés) jelölőnégyzet be van jelölve, be van jelölve.
- Ellenőrizze, hogy be van-e jelölve az OpenAPI-támogatás engedélyezése jelölőnégyzet.
- Válassza a Create gombot.
NuGet-csomag hozzáadása
Az oktatóanyagban használt adatbázis támogatásához NuGet-csomagot kell hozzáadni.
- Az Eszközök menüben válassza a NuGet Package Manager > Megoldáshoz készült NuGet-csomagok kezeléselehetőséget.
- Válassza a Tallózás lapot.
- Írja be Microsoft.EntityFrameworkCore.InMemory a keresőmezőbe, majd válassza a
Microsoft.EntityFrameworkCore.InMemory. - Jelölje be a Project jelölőnégyzetet a jobb oldali panelen, majd válassza a Telepítéslehetőséget.
Note
A csomagok .NET-alkalmazásokhoz való hozzáadásáról a Csomagok telepítése és kezeléseCsomaghasználati munkafolyamat (NuGet-dokumentáció)című cikkben talál útmutatást. Ellenőrizze a megfelelő csomagverziókat a NuGet.org.
A projekt tesztelése
A projektsablon létrehoz egy WeatherForecast API-t a Swagger támogatásával.
Nyomja le a Ctrl+F5 billentyűkombinációt a hibakereső nélküli futtatáshoz.
A Visual Studio az alábbi párbeszédpanelt jeleníti meg, ha egy projekt még nincs ssl használatára konfigurálva:
Válassza Igen lehetőséget, ha megbízik az IIS Express SSL-tanúsítványban.
A következő párbeszédpanel jelenik meg:
Válassza Igen lehetőséget, ha elfogadja, hogy megbízik a fejlesztési tanúsítványban.
A Firefox böngésző megbízhatóságáról további információt a Firefox SEC_ERROR_INADEQUATE_KEY_USAGE tanúsítványhibacímű témakörben talál.
A Visual Studio elindítja az alapértelmezett böngészőt, és a https://localhost:<port>/swagger/index.html címre navigál, ahol a <port> projekt létrehozásakor egy véletlenszerűen kiválasztott portszám.
Megjelenik a Swagger oldal /swagger/index.html . Válassza a GET>Próbálja ki>Végrehajtás lehetőséget. Az oldal a következőt jeleníti meg:
- A WeatherForecast API tesztelésére vonatkozó Curl-parancs .
- A WeatherForecast API tesztelésének URL-címe.
- A válaszkód, a törzs és a fejlécek.
- Egy legördülő lista médiatípusokkal, valamint a példaértékkel és sémával.
Ha a Swagger-oldal nem jelenik meg, tekintse meg ezt a GitHub-problémát.
A Swagger hasznos dokumentációkat és súgólapokat hoz létre a webes API-khoz. Ez az oktatóanyag a Swagger használatával teszteli az alkalmazást. A Swaggerrel kapcsolatos további információkért tekintse meg ASP.NET Core webes API-dokumentációját a Swagger/OpenAPI használatával.
Másolja és illessze be a kérés URL-címét a böngészőben: https://localhost:<port>/weatherforecast
A következő példához hasonló JSON-t ad vissza:
[
{
"date": "2019-07-16T19:04:05.7257911-06:00",
"temperatureC": 52,
"temperatureF": 125,
"summary": "Mild"
},
{
"date": "2019-07-17T19:04:05.7258461-06:00",
"temperatureC": 36,
"temperatureF": 96,
"summary": "Warm"
},
{
"date": "2019-07-18T19:04:05.7258467-06:00",
"temperatureC": 39,
"temperatureF": 102,
"summary": "Cool"
},
{
"date": "2019-07-19T19:04:05.7258471-06:00",
"temperatureC": 10,
"temperatureF": 49,
"summary": "Bracing"
},
{
"date": "2019-07-20T19:04:05.7258474-06:00",
"temperatureC": -1,
"temperatureF": 31,
"summary": "Chilly"
}
]
Modellosztály hozzáadása
A modell olyan osztályok készlete, amelyek az alkalmazás által kezelt adatokat képviselik. Az alkalmazás modellje az TodoItem osztály.
- A Megoldáskezelő-ben kattintson a jobb gombbal a projektre. Válassza >Új mappa hozzáadásalehetőséget. Nevezze el a mappát
Models. - Kattintson a jobb gombbal a
Modelsmappára, és válassza a Hozzáadás>Osztályt lehetőséget. Nevezze el a TodoItem osztályt, és válassza a Hozzáadás lehetőséget. - Cserélje le a sablonkódot a következőre:
namespace TodoApi.Models;
public class TodoItem
{
public long Id { get; set; }
public string? Name { get; set; }
public bool IsComplete { get; set; }
}
A Id tulajdonság egy relációs adatbázis egyedi kulcsaként működik.
Modelosztályok bárhová elhelyezhetők a projektben, de a Models mappát hagyományosan az előírások szerint használják.
Adatbázis-környezet hozzáadása
Az adatbázis-környezet az a fő osztály, amely koordinálja az entitás-keretrendszer funkcióit egy adatmodellhez. Ez az osztály az osztályból Microsoft.EntityFrameworkCore.DbContext származtatva jön létre.
- Kattintson a jobb gombbal a
Modelsmappára, és válassza a Hozzáadás>Osztályt lehetőséget. Nevezze el a TodoContext osztályt, és kattintson a Hozzáadás gombra.
Írja be a következő kódot:
using Microsoft.EntityFrameworkCore; namespace TodoApi.Models; public class TodoContext : DbContext { public TodoContext(DbContextOptions<TodoContext> options) : base(options) { } public DbSet<TodoItem> TodoItems { get; set; } = null!; }
Az adatbázis-környezet regisztrálása
Az ASP.NET Core-ban az olyan szolgáltatásokat, mint a DB-környezet, regisztrálni kell a függőséginjektálási (DI) tárolóban. A tároló biztosítja a szolgáltatást a vezérlők számára.
Frissítse Program.cs a következő kiemelt kóddal:
using Microsoft.EntityFrameworkCore;
using TodoApi.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddDbContext<TodoContext>(opt =>
opt.UseInMemoryDatabase("TodoList"));
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Az előző kód:
-
usingirányelveket ad hozzá. - Hozzáadja az adatbázis-környezetet a DI-tárolóhoz.
- Megadja, hogy az adatbázis-környezet memórián belüli adatbázist használjon.
Vezérlő állványzata
Kattintson a jobb gombbal a
Controllersmappára.Válassza a Hozzáadás lehetőséget>New Scaffolded Item.
Válassza a műveletekkel rendelkező API-vezérlőt az Entity Framework használatával, majd válassza a Hozzáadás lehetőséget.
Az Api Controller hozzáadása műveletekkel az Entity Framework párbeszédpanelen :
- Válassza a TodoItem (TodoApi.Models) lehetőséget a Modell osztályban.
- Válassza a TodoContext (TodoApi.Models) lehetőséget az Adatkörnyezet osztályban.
- Válassza a Hozzáadás lehetőséget.
Ha az állványozási művelet sikertelen, kattintson a Hozzáadás gombra, hogy újra megpróbálja az állványozást.
A létrehozott kód:
- Az osztály megjelölése az
[ApiController]attribútummal. Ez az attribútum azt jelzi, hogy a vezérlő válaszol a webes API-kérésekre. Az attribútum által lehetővé tetső konkrét viselkedésekkel kapcsolatos információkért lásd: Webes API-k létrehozása ASP.NET Core használatával. - A DI használatával injektálja az adatbázis-környezetet (
TodoContext) a vezérlőbe. Az adatbázis-környezet a vezérlőben található CRUD-metódusok mindegyikében használatos.
A ASP.NET Core-sablonok a következőhöz:
- A nézetekkel rendelkező vezérlők szerepelnek
[action]az útvonalsablonban. - Az API-vezérlők nem szerepelnek
[action]az útvonalsablonban.
Ha a [action] jogkivonat nem szerepel az útvonalsablonban, a művelet neve (metódus neve) nem szerepel a végpontban. Vagyis a művelet társított metódusneve nem szerepel az egyező útvonalban.
A PostTodoItem létrehozási metódus frissítése
Frissítse a visszatérési utasítást a PostTodoItem úgy, hogy a nameof operátort használja:
[HttpPost]
public async Task<ActionResult<TodoItem>> PostTodoItem(TodoItem todoItem)
{
_context.TodoItems.Add(todoItem);
await _context.SaveChangesAsync();
// return CreatedAtAction("GetTodoItem", new { id = todoItem.Id }, todoItem);
return CreatedAtAction(nameof(GetTodoItem), new { id = todoItem.Id }, todoItem);
}
Az előző kód egy HTTP POST metódus, amelyet az [HttpPost] attribútum jelez. A metódus lekéri a TodoItem értékét a HTTP-kérés törzséből.
További információ: Attribútum-útválasztás Http[Verb] attribútumokkal.
A CreatedAtAction módszer:
- Ha sikeres, egy HTTP 201-állapotkódot ad vissza.
HTTP 201egy olyan metódus szokásos válaszaHTTP POST, amely új erőforrást hoz létre a kiszolgálón. -
Hely fejlécet ad hozzá a válaszhoz. A
Locationfejléc az újonnan létrehozott to-do elem URI-ját adja meg. További információ: 10.2.2 201 Létrehozás. - A
GetTodoItemfejléc URI-jának létrehozásához aLocationműveletre hivatkozik. A C#nameof-kulcsszóval elkerülhető, hogy a hívásbanCreatedAtActiona művelet neve nehezen kódolódjon.
PostTodoItem tesztelése
Az alkalmazás futtatásához nyomja le a Ctrl+F5 billentyűkombinációt.
A Swagger böngészőablakában válassza a POST /api/TodoItems lehetőséget, majd válassza a Kipróbálás lehetőséget.
A Kérelem törzs beviteli ablakában frissítse a JSON-t. Például
{ "name": "walk dog", "isComplete": true }Válassza a Végrehajtás lehetőséget
A hely fejlécének URI-jának tesztelése
Az előző POST-ben a Swagger felhasználói felülete megjeleníti a hely fejlécét a Válasz fejlécek alatt. Például: location: https://localhost:7260/api/TodoItems/1. A hely fejléce megmutatja a létrehozott erőforrás URI-ját.
A hely fejlécének tesztelése:
A Swagger böngészőablakában válassza a GET /api/TodoItems/{id} lehetőséget, majd válassza a Kipróbálás lehetőséget.
Írja be
1a beviteliidmezőbe, majd válassza a Végrehajtás lehetőséget.
A GET metódusok vizsgálata
Két GET-végpont implementálva van:
GET /api/todoitemsGET /api/todoitems/{id}
Az előző szakasz egy példát mutatott az útvonalra /api/todoitems/{id} .
Kövesse a POST utasításait egy másik teendőelem hozzáadásához, majd tesztelje az útvonalat a /api/todoitems Swagger használatával.
Ez az alkalmazás memórián belüli adatbázist használ. Ha az alkalmazás le van állítva és elindult, az előző GET kérés nem ad vissza adatokat. Ha az alkalmazás nem ad vissza adatot, küldjön POST adatokat az alkalmazásnak.
Útválasztás és URL-útvonalak
Az [HttpGet] attribútum egy kérésre válaszoló metódust HTTP GET jelöl. Az egyes metódusok URL-elérési útja a következőképpen jön létre:
Kezdje a sablonsztringgel a vezérlő attribútumában
Route:[Route("api/[controller]")] [ApiController] public class TodoItemsController : ControllerBaseCserélje le
[controller]a vezérlő nevét, amely konvenció szerint a vezérlőosztály neve mínusz a "Controller" utótag. Ebben a mintában a vezérlőosztály neve TodoItemsController, így a vezérlő neve "TodoItems". ASP.NET Core útválasztás nem érzékeny a kis- és nagybetűkre.Ha az
[HttpGet]attribútum rendelkezik útvonalsablonnal (például[HttpGet("products")]), fűzze hozzá az elérési úthoz. Ez a minta nem használ sablont. További információ: Attribútum-útválasztás Http[Verb] attribútumokkal.
Az alábbi GetTodoItem metódus "{id}" a to-do elem egyedi azonosítójának helyőrző változója. Amikor meghívják GetTodoItem, az URL-címben "{id}" értéke megadva a metódus id paraméterében.
[HttpGet("{id}")]
public async Task<ActionResult<TodoItem>> GetTodoItem(long id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
return todoItem;
}
Visszaadott értékek
A `GetTodoItems` és `GetTodoItem` metódusok visszatérési típusa ActionResult<T> típusú. ASP.NET Core automatikusan szerializálja az objektumot JSON formátumra, és beírja a JSON-t a válaszüzenet törzsébe. A visszatérési típus válaszkódja 200 OK, feltéve, hogy nincsenek kezeletlen kivételek. A nem kezelt kivételek 5xx-hibákká lesznek lefordítva.
ActionResult A visszatérési típusok a HTTP-állapotkódok széles skáláját jelölhetik. A GetTodoItem például két különböző állapotértéket adhat vissza:
- Ha egyetlen elem sem felel meg a kért azonosítónak, a metódus egy 404-NotFound hibakódot ad vissza.
- Ellenkező esetben a metódus egy JSON-válasz törzsével adja vissza a 200-t. Az
itemeredmény visszaadása eseténHTTP 200választ kapunk.
A PutTodoItem metódus
Vizsgálja meg a PutTodoItem metódust:
[HttpPut("{id}")]
public async Task<IActionResult> PutTodoItem(long id, TodoItem todoItem)
{
if (id != todoItem.Id)
{
return BadRequest();
}
_context.Entry(todoItem).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!TodoItemExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
PutTodoItem hasonló PostTodoItem-hoz/-hez, kivéve, hogy HTTP PUT-t használ. A válasz 204 (nincs tartalom). A HTTP-specifikáció szerint a PUT kéréshez az ügyfélnek a teljes frissített entitást kell elküldenie, nem csak a módosításokat. A részleges frissítések támogatásához használja HTTP PATCH.
A PutTodoItem metódus tesztelése
Ez a minta egy memórián belüli adatbázist használ, amelyet az alkalmazás minden indításakor inicializálni kell. Az adatbázisnak tartalmaznia kell egy elemet, mielőtt PUT-hívást kezdeményezne. A GET hívásával győződjön meg arról, hogy van egy elem az adatbázisban, mielőtt PUT-hívást kezdeményez.
A Swagger felhasználói felületén kattintson a PUT gombra, hogy frissítse az azonosítóval 1 rendelkező TodoItem-t, és állítsa annak nevét "feed fish"-re. Vegye figyelembe, hogy a válasz HTTP 204 No Content.
A DeleteTodoItem metódus
Vizsgálja meg a DeleteTodoItem metódust:
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteTodoItem(long id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
_context.TodoItems.Remove(todoItem);
await _context.SaveChangesAsync();
return NoContent();
}
A DeleteTodoItem metódus tesztelése
A Swagger UI-ban törölje azt a TodoItem, amelynek azonosítója 1. Vegye figyelembe, hogy a válasz HTTP 204 No Content.
Tesztelés más eszközökkel
Számos más eszköz is használható a webes API-k tesztelésére, például:
- Visual Studio Endpoints Explorer és .http fájlok
- http-repl
-
curl. Swagger a(z)
curlhasználja, és megjeleníti azcurlparancsokat, amelyeket elküld. - Fiddler
További információk:
Túlküldés megakadályozása
A mintaalkalmazás jelenleg a teljes TodoItem objektumot teszi elérhetővé. Az éles alkalmazások általában szabályozzák az adatok bevitelét és visszaadását a modell egy részhalmazával. Ennek több oka is van, és a biztonság a legfontosabb. A modell részhalmazát általában adatátviteli objektumnak (DTO), bemeneti modellnek vagy nézetmodellnek nevezzük. Ebben az oktatóanyagban DTO-t használunk.
A DTO a következő célra használható:
- A túlküldés megakadályozása.
- Elrejtheti az ügyfelek által nem megtekinteni kívánt tulajdonságokat.
- Kihagy néhány tulajdonságot a hasznos adat méretének csökkentése érdekében.
- Beágyazott objektumokat tartalmazó objektumdiagramok simítása. Az egyszerűsített objektum gráfok kényelmesebbek lehetnek az ügyfelek számára.
A DTO-megközelítés bemutatásához frissítse a TodoItem osztályt egy titkos mezőre:
namespace TodoApi.Models
{
public class TodoItem
{
public long Id { get; set; }
public string? Name { get; set; }
public bool IsComplete { get; set; }
public string? Secret { get; set; }
}
}
A titkos mezőt el kell rejteni az alkalmazás elől, de egy felügyeleti alkalmazás dönthet úgy, hogy közzéteszi.
Ellenőrizze, hogy közzéteheti és lekérheti-e a titkos kód mezőt.
DTO-modell létrehozása:
namespace TodoApi.Models;
public class TodoItemDTO
{
public long Id { get; set; }
public string? Name { get; set; }
public bool IsComplete { get; set; }
}
Frissítse a TodoItemsController használatát a TodoItemDTO-ra:
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using TodoApi.Models;
namespace TodoApi.Controllers;
[Route("api/[controller]")]
[ApiController]
public class TodoItemsController : ControllerBase
{
private readonly TodoContext _context;
public TodoItemsController(TodoContext context)
{
_context = context;
}
// GET: api/TodoItems
[HttpGet]
public async Task<ActionResult<IEnumerable<TodoItemDTO>>> GetTodoItems()
{
return await _context.TodoItems
.Select(x => ItemToDTO(x))
.ToListAsync();
}
// GET: api/TodoItems/5
// <snippet_GetByID>
[HttpGet("{id}")]
public async Task<ActionResult<TodoItemDTO>> GetTodoItem(long id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
return ItemToDTO(todoItem);
}
// </snippet_GetByID>
// PUT: api/TodoItems/5
// To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
// <snippet_Update>
[HttpPut("{id}")]
public async Task<IActionResult> PutTodoItem(long id, TodoItemDTO todoDTO)
{
if (id != todoDTO.Id)
{
return BadRequest();
}
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
todoItem.Name = todoDTO.Name;
todoItem.IsComplete = todoDTO.IsComplete;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException) when (!TodoItemExists(id))
{
return NotFound();
}
return NoContent();
}
// </snippet_Update>
// POST: api/TodoItems
// To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
// <snippet_Create>
[HttpPost]
public async Task<ActionResult<TodoItemDTO>> PostTodoItem(TodoItemDTO todoDTO)
{
var todoItem = new TodoItem
{
IsComplete = todoDTO.IsComplete,
Name = todoDTO.Name
};
_context.TodoItems.Add(todoItem);
await _context.SaveChangesAsync();
return CreatedAtAction(
nameof(GetTodoItem),
new { id = todoItem.Id },
ItemToDTO(todoItem));
}
// </snippet_Create>
// DELETE: api/TodoItems/5
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteTodoItem(long id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
_context.TodoItems.Remove(todoItem);
await _context.SaveChangesAsync();
return NoContent();
}
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
};
}
Ellenőrizze, hogy nem tudja-e közzétenni vagy lekérni a titkos kód mezőt.
A webes API meghívása JavaScript használatával
Lásd az oktatóanyagot: ASP.NET Core webes API meghívása JavaScript használatával.
Webes API videósorozat
Lásd Videó: Webes API-k kezdők számára.
Vállalati webalkalmazás-minták
A megbízható, biztonságos, teljesíthető, tesztelhető és méretezhető ASP.NET Core-alkalmazás létrehozásával kapcsolatos útmutatásért tekintse meg Vállalati webalkalmazás-mintákcímű témakört. Rendelkezésre áll egy teljesen felhasználásra kész példawebalkalmazás, amely implementálja a mintákat.
Hitelesítési támogatás hozzáadása webes API-hoz
ASP.NET Core Identity felhasználói felület (UI) bejelentkezési funkciót ad hozzá ASP.NET Core-webalkalmazásokhoz. A webes API-k és SPA-k védelméhez használja az alábbiak egyikét:
A Duende Identity Server egy OpenID Connect- és OAuth 2.0-keretrendszer ASP.NET Core-hoz. A Duende Identity Server a következő biztonsági funkciókat teszi lehetővé:
- Hitelesítés szolgáltatásként (AaaS)
- Egyszeri bejelentkezés/kijelentkezés (SSO) több alkalmazástípuson keresztül
- Hozzáférés-vezérlés API-khoz
- Szövetségi átjáró
Important
Duende Software esetleg licencdíjat kérhet a Duende Identity Server üzemeltetési használatáért. További információ: Migrálás ASP.NET Core-ból .NET 5-ről .NET 6-ra.
További információ: Duende Identity Server dokumentációja (Duende Software webhely).
Közzététel az Azure-ban
Az Azure-ban való üzembe helyezésről további információért lásd: Gyorsútmutató: ASP.NET webalkalmazás üzembe helyezése.
További erőforrások
Az oktatóanyag mintakódjának megtekintése vagy letöltése. Tekintse meg , hogyan töltheti le.
További információt a következő források tartalmaznak:
- Webes API-k létrehozása az ASP.NET Core segítségével
- Oktatóanyag: Minimális API létrehozása ASP.NET Core
- ASP.NET Core webes API dokumentáció Swaggerrel / OpenAPI-val
- Razor Az Entity Framework Core lapjai a ASP.NET Core-ban – 1. oktatóanyag a 8-ból
- ASP.NET Core vezérlőműveleteinek útválasztása
- A vezérlőműveletek visszatérési típusai az ASP.NET Core webes API-ban
- ASP.NET Core-alkalmazások üzembe helyezése az Azure App Service-
- ASP.NET Core tárhely létrehozása és üzembe helyezése
- Webes API létrehozása a ASP.NET Core használatával