Migrace z webového rozhraní API ASP.NET na ASP.NET Core
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 části Začínáme s webovým rozhraním API 2 ASP.NET do ASP.NET Core.
Předpoklady
- Sada Visual Studio 2022 se sadou funkcí Vývoj pro ASP.NET a web
- Sada .NET 6.0 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ě Konfigurovat nový projekt pojmenujte projekt ProductsCore a vyberte Další.
- V dialogovém okně Další informace :
- Ověřte, že rozhraní je .NET 6.0 (dlouhodobá podpora).
- Ověřte, že je zaškrtnuté políčko Použít kontrolery (zrušení zaškrtnutí pro použití minimálních rozhraní API).
- Zrušte zaškrtnutí políčka Povolit podporu OpenAPI.
- Vyberte Vytvořit.
Odebrání souborů šablony WeatherForecast
WeatherForecast.cs
Odeberte z nového projektu ProductsCore soubory aControllers/WeatherForecastController.cs
ukázkové soubory.- Otevřete vlastnosti\launch Nastavení.json.
- Změňte
launchUrl
vlastnosti zweatherforcast
naproductscore
.
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 naleznete v souboru 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 produktu
- V Průzkumník řešení klikněte pravým tlačítkem myši na projekt. Vyberte Přidat>novou složku. Pojmenujte složku Models.
- Klikněte pravým tlačítkem myši na složku Modely . Vyberte Přidat>třídu. Pojmenujte produkt třídy 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í:
- Poznámka
?
byla přidána pro deklaraci aCategory
vlastnosti jako odkazové typy s možnouName
hodnotou null.
Díky použití funkce s možnou hodnotou Null zavedenou v jazyce C# 8 můž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 odkazu.
V tomto případě je záměrem, že jde Category
o typy s možnou Name
hodnotou null.
ASP.NET projekty Core 6.0 ve výchozím nastavení umožňují odkazové typy s možnou hodnotou null. Další informace naleznete v tématu Odkazové typy s možnou hodnotou Null.
Zkopírování controlleru ProductsController
- Klikněte pravým tlačítkem myši na složku Kontrolery .
- Vyberte Přidat > kontroler....
- V dialogovém okně Přidat novou vygenerovanou položku vyberte kontroler Mvc – prázdný a pak 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í změny, aby se migrovali 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.Http
Obor názvůIHttpActionResult
Rozhraní
- Třída
Změní příkaz
using ProductsApp.Models;
nausing ProductsCore.Models;
.Nastaví kořenový obor názvů na
ProductsCore
.Změny
ApiController
v souboru ControllerBase.Přidá
using Microsoft.AspNetCore.Mvc;
k vyřešeníControllerBase
odkazu.Změní návratový
GetProduct
typ akce zIHttpActionResult
naActionResult<Product>
. Další informace najdete v tématu Návratové typy akcí kontroleru.GetProduct
Zjednodušuje příkaz akcereturn
na 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}")]
Směrování
ASP.NET Core poskytuje minimální model hostování, ve kterém middleware směrování koncového bodu zabalí celý kanál middlewaru, a proto je možné trasy přidat přímo do WebApplication bez explicitního volání UseEndpoints nebo UseRouting registrace tras.
UseRouting
se dá i nadále použít k určení, kde se provádí porovnávání tras, ale UseRouting
není nutné je explicitně volat, pokud by se trasy měly shodovat na začátku kanálu 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 ke WebApplication spuštění na konci kanálu.
Směrování v migrovaném ProductsController
Migrovaný ProductsController
soubor 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]
zajišťuje směrování atributů jako požadavek na všechny akce v tomto kontroleru.Směrování atributů podporuje tokeny, například
[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.
- Zajistěte, aby trasy zůstaly synchronizované s odpovídajícími řadiči a akcemi při použití automatického refaktoringu přejmenování.
Požadavky HTTP Get jsou povolené pro
ProductController
akce s následujícími atributy:[HttpGet]
atribut použitý naGetAllProducts
akci.[HttpGet("{id}")]
atribut použitý naGetProduct
akci.
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í)
Další materiály
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í)
Předpoklady
- Sada Visual Studio 2019 16.4 nebo novější se sadou funkcí 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 části Začínáme s ASP.NET webového rozhraní 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.cs
, volání na 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 Register
metodu:
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:
- Nakonfiguruje směrování atributů, i když se ve skutečnosti nepoužívá.
- Nakonfiguruje směrovací tabulku.
Vzorový kód očekává, že adresy URL budou odpovídat formátu
/api/{controller}/{id}
a{id}
budou 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 prázdnou šablonu řešení a vyberte Další.
- Pojmenujte řešení WebAPIMigration. Vyberte Vytvořit.
- Přidejte do řešení existující projekt ProductsApp .
Přidejte nový projekt rozhraní API pro migraci na:
- Do řešení přidejte nový projekt webové aplikace ASP.NET Core.
- V dialogovém okně Konfigurovat nový projekt pojmenujte projekt ProductsCore a vyberte Vytvořit.
- V dialogovém okně Vytvořit novou webovou aplikaci ASP.NET Core potvrďte, že jsou vybrané .NET Core a ASP.NET Core 3.1 . Vyberte šablonu projektu rozhraní API a vyberte Vytvořit.
WeatherForecast.cs
Odeberte z nového projektu ProductsCore soubory aControllers/WeatherForecastController.cs
ukázkové soubory.
Řešení teď obsahuje dva projekty. Následující části popisují 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 soubor web.config přidá při publikování.
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
aktualizaci 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);
}
}
}
ProductsController
Aktualizujte ASP.NET Core:
- Zkopírujte
Controllers/ProductsController.cs
složku Models z původního projektu do nové. - Změňte kořenový obor názvů zkopírovaných souborů na
ProductsCore
. - Aktualizujte
using ProductsApp.Models;
příkaz nausing ProductsCore.Models;
.
V ASP.NET Core neexistují následující komponenty:
- Třída
ApiController
System.Web.Http
Obor názvůIHttpActionResult
Rozhraní
Proveďte následující změny:
Změňte
ApiController
na ControllerBase. Přidejteusing Microsoft.AspNetCore.Mvc;
k vyřešeníControllerBase
odkazu.Odstraňte
using System.Web.Http;
.Změňte návratový
GetProduct
typ akce naIHttpActionResult
ActionResult<Product>
hodnotu .GetProduct
Zjednodušte příkaz akcereturn
následujícím postupem:return product;
Konfigurace směrování
Šablona projektu rozhraní ASP.NET Core API zahrnuje konfiguraci směrování koncového bodu ve vygenerovaném kódu.
Následující UseRouting volání a UseEndpoints volání:
- Registrace porovnávání tras a spouštění koncových bodů v kanálu middlewaru
- Nahraďte soubor projektu
App_Start/WebApiConfig.cs
ProductsApp.
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
ProductsController
třídu následujícími atributy:[Route("api/[controller]")] [ApiController]
Předchozí
[Route]
atribut konfiguruje model směrování atributů kontroleru. Atribut[ApiController]
zajišťuje směrování atributů jako požadavek na všechny akce v tomto kontroleru.Směrování atributů podporuje tokeny, například
[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.
- Zajistěte, aby trasy zůstaly synchronizované s odpovídajícími řadiči a akcemi při použití automatického refaktoringu přejmenování.
Povolte požadavky HTTP Get na
ProductsController
akce:[HttpGet]
Použijte atribut naGetAllProducts
akci.[HttpGet("{id}")]
Použijte atribut naGetProduct
akci.
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.