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.
ASP.NET Core kombinuje modely MVC a webového rozhraní API ASP.NET 4.x do jednoho programovacího modelu označovaného jako ASP.NET Core MVC.
Tento článek ukazuje, jak migrovat kontroler Products vytvořený v Začínáme s ASP.NET Web API 2 do ASP.NET Core.
Prerequisites
- Visual Studio 2022 s úlohou vývoje pro ASP.NET a web .
- Sada .NET 6 SDK
Vytvoření nového projektu webového rozhraní API ASP.NET Core
- V nabídce Soubor vyberte Nový>projekt.
- Do vyhledávacího pole zadejte webové rozhraní API .
- Vyberte šablonu ASP.NET Základní webové rozhraní API a vyberte Další.
- V dialogovém okně Konfigurace nového projektu pojmenujte projekt ProductsCore a vyberte Další.
- V dialogovém okně Další informace :
- Ověřte, že Framework je .NET 6.0 (dlouhodobá podpora).
- Ověřte, že je zaškrtnuté políčko Použít kontrolery (zrušte zaškrtnutí políčka Používat minimální rozhraní API ).
- Zrušte zaškrtnutí u možnosti Povolit podporu OpenAPI.
- Vyberte Vytvořit.
Odstraňte soubory šablony WeatherForecast
- Odeberte
WeatherForecast.csaControllers/WeatherForecastController.csukázkové soubory z nového projektu ProductsCore. - Otevřete \launchSettings.jsVlastnosti.
- Změňte vlastnosti
launchUrlzweatherforcastnaproductscore.
Konfigurace pro webové rozhraní API ASP.NET Core
ASP.NET Core nepoužívá složku App_Start ani soubor Global.asax. Soubor web.config se přidá při publikování. Další informace viz soubor web.config.
Soubor Program.cs:
- Nahradí Global.asax.
- Zpracovává všechny úlohy po spuštění aplikace.
Další informace najdete v tématu Spuštění aplikace v ASP.NET Core.
Následuje příklad spouštěcího kódu aplikace v souboru ASP.NET Core Program.cs:
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
var app = builder.Build();
// Configure the HTTP request pipeline.
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Zkopírování modelu Product
- V Průzkumníku řešeníklikněte pravým tlačítkem na projekt. Vyberte Přidat>novou složku. Pojmenujte složku Models.
- Klikněte pravým tlačítkem na složku Models. Vyberte Přidat>třídu. Pojmenujte třídu Product a vyberte Přidat.
- Nahraďte kód modelu šablony následujícím kódem:
namespace ProductsCore.Models
{
public class Product
{
public int Id { get; set; }
public string? Name { get; set; }
public string? Category { get; set; }
public decimal Price { get; set; }
}
}
Předchozí zvýrazněný kód změní následující:
- Byla přidána
?poznámka, která deklaruje vlastnostiNameaCategoryjako odkazové typy s možnou hodnotou null.
Díky použití funkce s možnou hodnotou Null zavedenou v jazyce C# 8může ASP.NET Core poskytovat další analýzu toku kódu a bezpečnost kompilace při zpracování referenčních typů. Například ochrana před null výjimkami při referencích.
V tomto případě je záměrem, že Name a Category mohou být typy s možnou hodnotou null.
ASP.NET Core v projektech .NET 6 standardně aktivuje odkazové typy s možnou hodnotou null. Pro více informací viz Nullable reference types.
Zkopírujte ProductsController.
- Klikněte pravým tlačítkem na složku Controllers.
- Vyberte Přidat řadič >....
- V dialogovém okně Přidat novou vygenerovanou položku vyberte MVC kontroler – Prázdný, a potom vyberte Přidat.
- Pojmenujte kontroler ProductsController a vyberte Přidat.
- Kód kontroleru šablony nahraďte následujícím kódem:
using Microsoft.AspNetCore.Mvc;
using ProductsCore.Models;
namespace ProductsCore.Controllers;
[Route("api/[controller]")]
[ApiController]
public class ProductsController : ControllerBase
{
Product[] products = new Product[]
{
new Product
{
Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1
},
new Product
{
Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M
},
new Product
{
Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M
}
};
[HttpGet]
public IEnumerable<Product> GetAllProducts()
{
return products;
}
[HttpGet("{id}")]
public ActionResult<Product> GetProduct(int id)
{
var product = products.FirstOrDefault((p) => p.Id == id);
if (product == null)
{
return NotFound();
}
return product;
}
}
Předchozí zvýrazněný kód změní následující, abyste přešli na ASP.NET Core:
Odebere příkazy using pro následující komponenty ASP.NET 4.x, které v ASP.NET Core neexistují:
- Třída
ApiController -
System.Web.Httpjmenný prostor - rozhraní
IHttpActionResult
- Třída
Změní příkaz
using ProductsApp.Models;nausing ProductsCore.Models;.Nastaví kořenový obor názvů na
ProductsCore.Změní
ApiControllerna ControllerBase.Přidá
using Microsoft.AspNetCore.Mvc;pro vyřešení odkazu naControllerBase.Změní návratový typ akce
GetProductzIHttpActionResultnaActionResult<Product>. Další informace najdete v tématu Návratové typy akcí kontroleru.Zjednodušuje příkaz
GetProductz akcereturnna následující příkaz:return product;Přidá následující atributy, které jsou vysvětleny v dalších částech:
[Route("api/[controller]")][ApiController][HttpGet][HttpGet("{id}")]
Routing
ASP.NET Core poskytuje minimální model hostování, ve kterém middleware směrování koncových bodů obklopuje celý kanál zpracování, a proto je možné přidávat trasy přímo do WebApplication bez explicitního volání UseEndpoints nebo UseRouting pro registraci tras.
UseRouting se dá i nadále použít k určení, kde se provádí porovnávání tras, ale UseRouting nemusí být explicitně volána, pokud se trasy mají shodovat na začátku řetězce middlewaru.
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
var app = builder.Build();
// Configure the HTTP request pipeline.
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Poznámka: Trasy přidané přímo do WebApplication se spouštějí na konci kanálu.
Směrování v migrovaném ProductsController
Migrovaný ProductsController obsahuje následující zvýrazněné atributy:
using Microsoft.AspNetCore.Mvc;
using ProductsCore.Models;
namespace ProductsCore.Controllers;
[Route("api/[controller]")]
[ApiController]
public class ProductsController : ControllerBase
{
Product[] products = new Product[]
{
new Product
{
Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1
},
new Product
{
Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M
},
new Product
{
Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M
}
};
[HttpGet]
public IEnumerable<Product> GetAllProducts()
{
return products;
}
[HttpGet("{id}")]
public ActionResult<Product> GetProduct(int id)
{
var product = products.FirstOrDefault((p) => p.Id == id);
if (product == null)
{
return NotFound();
}
return product;
}
}
Atribut
[Route]konfiguruje model směrování atributů kontroleru.Atribut
[ApiController]vytváří směrování atributů jako požadavek na všechny akce v tomto kontroleru.Směrování atributů podporuje tokeny, jako jsou
[controller]a[action]. Za běhu se každý token nahradí názvem kontroleru nebo akce, na který byl atribut použit. Tokeny:- Snižuje nebo eliminuje potřebu používat pevně zakódované řetězce pro trasu.
- Je nutné zajistit, aby trasy zůstaly synchronizované s odpovídajícími řadiči a akcemi při použití automatických refaktorací přejmenování.
Požadavky HTTP Get jsou povolené pro akce
ProductControllers následujícími atributy:-
[HttpGet]atribut použitý na akciGetAllProducts. -
[HttpGet("{id}")]atribut použitý na akciGetProduct.
-
Spusťte migrovaný projekt a přejděte na /api/products. Příklad: https://localhost:<port>/api/products. Zobrazí se úplný seznam tří produktů. Přejděte na /api/products/1. Zobrazí se první produkt.
Zobrazení nebo stažení ukázkového kódu (postup stažení)
Dodatečné zdroje
Tento článek ukazuje kroky potřebné k migraci z webového rozhraní API ASP.NET 4.x na ASP.NET Core MVC.
Zobrazení nebo stažení ukázkového kódu (postup stažení)
Prerequisites
- Visual Studio 2019 16.4 nebo novější s pracovním vytížením pro vývoj pro ASP.NET a web
- Sada .NET Core 3.1 SDK
Kontrola projektu webového rozhraní API ASP.NET 4.x
Tento článek používá projekt ProductsApp vytvořený v Začínáme s ASP.NET Web API 2. V projektu je základní ASP.NET projekt webového rozhraní API 4.x nakonfigurovaný následujícím způsobem.
V Global.asax.csse volá WebApiConfig.Register:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Routing;
namespace ProductsApp
{
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
}
}
Třída WebApiConfig se nachází ve složce App_Start a má statickou metodu Register:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace ProductsApp
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
Předchozí třída:
- Konfiguruje směrování atributů, ačkoliv se ve skutečnosti nepoužívá.
- Nakonfiguruje směrovací tabulku.
Vzorový kód očekává, že adresy URL odpovídají formátu
/api/{controller}/{id}, přičemž{id}je volitelné.
Následující části ukazují migraci projektu webového rozhraní API na ASP.NET Core MVC.
Vytvoření cílového projektu
Vytvořte nové prázdné řešení v sadě Visual Studio a přidejte projekt webového rozhraní API ASP.NET 4.x, který chcete migrovat:
- V nabídce Soubor vyberte Nový>projekt.
- Vyberte šablonu Prázdné řešení a vyberte Další.
- Pojmenujte řešení WebAPIMigration. Vyberte Vytvořit.
- Do řešení přidejte existující projekt ProductsApp.
Přidejte nový projekt rozhraní API pro migraci na:
- Do řešení přidejte nový projekt ASP.NET Core Webová aplikace.
- V dialogovém okně Konfigurovat nový projekt pojmenujte projekt „ProductsCore“ a vyberte Vytvořit.
- V dialogovém okně Vytvoření nové webové aplikace ASP.NET Core potvrďte, že jsou vybrány .NET Core a ASP.NET Core 3.1. Vyberte šablonu projektu rozhraní API a vyberte Vytvořit.
- Odeberte
WeatherForecast.csaControllers/WeatherForecastController.csukázkové soubory z nového projektu ProductsCore.
Řešení teď obsahuje dva projekty. Následující části vysvětlují migraci obsahu projektu ProductsApp do projektu ProductsCore.
Migrace konfigurace
ASP.NET Core nepoužívá složku App_Start ani soubor Global.asax. Kromě toho se při publikování přidá soubor web.config.
Třída Startup:
- Nahradí Global.asax.
- Zpracovává všechny úlohy po spuštění aplikace.
Další informace najdete v tématu Spuštění aplikace v ASP.NET Core.
Migrace modelů a kontrolerů
Následující kód ukazuje ProductsController, které má být aktualizováno pro ASP.NET Core:
using ProductsApp.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web.Http;
namespace ProductsApp.Controllers
{
public class ProductsController : ApiController
{
Product[] products = new Product[]
{
new Product
{
Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1
},
new Product
{
Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M
},
new Product
{
Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M
}
};
public IEnumerable<Product> GetAllProducts()
{
return products;
}
public IHttpActionResult GetProduct(int id)
{
var product = products.FirstOrDefault((p) => p.Id == id);
if (product == null)
{
return NotFound();
}
return Ok(product);
}
}
}
Aktualizujte ProductsController pro ASP.NET Core:
- Zkopírujte
Controllers/ProductsController.csa složku Models z původního projektu do nové složky. - Změňte kořenový obor názvů zkopírovaných souborů na
ProductsCore. - Aktualizujte příkaz
using ProductsApp.Models;nausing ProductsCore.Models;.
V ASP.NET Core neexistují následující komponenty:
- Třída
ApiController -
System.Web.Httpjmenný prostor - rozhraní
IHttpActionResult
Proveďte následující změny:
Změňte
ApiControllerna ControllerBase. Přidejteusing Microsoft.AspNetCore.Mvc;k vyřešení odkazu naControllerBase.Odstranit
using System.Web.Http;.Změňte návratový typ akce
GetProductzIHttpActionResultnaActionResult<Product>.Zjednodušte příkaz
GetProductakcereturnnásledujícím kódem:return product;
Konfigurace směrování
Šablona projektu ASP.NET Core API zahrnuje konfiguraci směrování koncového bodu v generovaném kódu.
Následující volání UseRouting a UseEndpoints:
- Registrace porovnávání tras a spouštění koncových bodů v middlewaru kanálu
- Nahraďte soubor projektu
App_Start/WebApiConfig.cs.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
Nakonfigurujte směrování následujícím způsobem:
Označte třídu
ProductsControllernásledujícími atributy:[Route("api/[controller]")] [ApiController]Předchozí atribut
[Route]konfiguruje model směrování atributů kontroleru. Atribut[ApiController]vytváří směrování atributů jako požadavek na všechny akce v tomto kontroleru.Směrování atributů podporuje tokeny, jako jsou
[controller]a[action]. Za běhu se každý token nahradí názvem kontroleru nebo akce, na který byl atribut použit. Tokeny:- Snižte počet magických řetězců v projektu.
- Je nutné zajistit, aby trasy zůstaly synchronizované s odpovídajícími řadiči a akcemi při použití automatických refaktorací přejmenování.
Povolte požadavky HTTP Get na akce
ProductsController:- Použijte atribut
[HttpGet]na akciGetAllProducts. - Použijte atribut
[HttpGet("{id}")]na akciGetProduct.
- Použijte atribut
Spusťte migrovaný projekt a přejděte na /api/products. Zobrazí se úplný seznam tří produktů. Přejděte na /api/products/1. Zobrazí se první produkt.