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.
Tento článek ukazuje, jak začít migrovat projekt ASP.NET MVC na ASP.NET Core MVC. V procesu se zvýrazní související změny z ASP.NET MVC.
Migrace z ASP.NET MVC je proces s více kroky. Tento článek se věnuje následujícím tématům:
- Počáteční nastavení
- Základní kontrolery a zobrazení
- Statický obsah
- Závislosti na straně klienta
Informace o migraci konfigurace a Identity kódu najdete v tématu Migrace konfigurace do ASP.NET Core a Migrace ověřování a Identity do ASP.NET Core.
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
Vytvoření počátečního projektu ASP.NET MVC
Vytvořte příklad projektu ASP.NET MVC v sadě Visual Studio pro migraci:
- V nabídce Soubor vyberte Nový>projekt.
- Vyberte ASP.NET Web Application (.NET Framework) a pak vyberte Další.
- Pojmenujte projekt WebApp1 tak, aby obor názvů odpovídal projektu ASP.NET Core vytvořený v dalším kroku. Vyberte Vytvořit.
- Vyberte MVC a pak vyberte Vytvořit.
Vytvoření projektu ASP.NET Core
Vytvořte nové řešení s novým projektem ASP.NET Core pro migraci na:
- Spusťte druhou instanci sady Visual Studio.
- V nabídce Soubor vyberte Nový>projekt.
- Vyberte ASP.NET Základní webová aplikace a pak vyberte Další.
- V dialogovém okně Konfigurovat nový projekt pojmenujte projekt WebApp1.
- Nastavte umístění na jiný adresář než předchozí projekt, aby používal stejný název projektu. Použití stejného oboru názvů usnadňuje kopírování kódu mezi těmito dvěma projekty. 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 Webová aplikace (modelView-Controller) a vyberte Vytvořit.
Konfigurace lokality ASP.NET Core pro použití MVC
V projektech ASP.NET Core 3.0 nebo novějších už rozhraní .NET Framework není podporovanou cílovou architekturou. Váš projekt musí cílit na .NET Core. Sdílená architektura ASP.NET Core, která zahrnuje MVC, je součástí instalace modulu runtime .NET Core. Sdílená architektura se automaticky odkazuje při použití Microsoft.NET.Sdk.Web sady SDK v souboru projektu:
<Project Sdk="Microsoft.NET.Sdk.Web">
Další informace naleznete v tématu Framework reference.
V ASP.NET Core třída Startup :
-
Global.asaxnahrazuje. - Zpracovává všechny úlohy po spuštění aplikace.
Další informace najdete v tématu Spuštění aplikace v ASP.NET Core.
V projektu ASP.NET Core otevřete Startup.cs soubor:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
}
ASP.NET Core aplikace musí zapnout funkce architektury prostřednictvím middleware. Předchozí kód vygenerovaný šablonou přidá následující služby a middleware:
- Metoda AddControllersWithViews rozšíření registruje podporu služby MVC pro kontrolery, funkce související s rozhraním API a zobrazení. Další informace o možnostech registrace služby MVC najdete v tématu Registrace služby MVC.
- Metoda rozšíření UseStaticFiles přidá obslužnou rutinu statického
Microsoft.AspNetCore.StaticFilessouboru. RozšiřujícíUseStaticFilesmetoda musí být volána předUseRouting. Další informace najdete v tématu Statické soubory v ASP.NET Core. - Metoda rozšíření UseRouting přidává směrování. Další informace najdete v tématu Směrování v ASP.NET Core.
Tato stávající konfigurace zahrnuje to, co je potřeba k migraci ukázkového projektu ASP.NET MVC. Další informace o možnostech middlewaru ASP.NET Core najdete v tématu Spuštění aplikace v ASP.NET Core.
Migrace kontrolerů a zobrazení
V projektu ASP.NET Core by se přidala nová prázdná třída kontroleru a třída zobrazení, která bude sloužit jako zástupné symboly, které používají stejné názvy jako kontroler a třídy zobrazení v libovolném projektu ASP.NET MVC pro migraci.
Projekt ASP.NET Core WebApp1 již obsahuje minimální ukázkový kontroler a zobrazení se stejným názvem jako projekt ASP.NET MVC. Ty tedy budou sloužit jako zástupné symboly pro kontroleru ASP.NET MVC a zobrazení, která se mají migrovat z projektu ASP.NET MVC WebApp1 .
- Zkopírujte metody z ASP.NET MVC
HomeControllera nahraďte nové metody ASP.NET CoreHomeController. Návratový typ metod akcí není nutné měnit. Návratový typ akční metody kontroleru v integrované šabloně MVC ASP.NET je ActionResult; v ASP.NET Core MVC metody akcí vracejíIActionResult.ActionResultimplementujeIActionResult. - V projektu ASP.NET Core klikněte pravým tlačítkem na zobrazení neboHome adresář a vyberte Přidat>existující položku.
- V dialogovém okně Přidat existující položku přejděte do adresáře projektu ASP.NET MVC Home.
-
About.cshtmlVyberte položku ,Contact.cshtmlaIndex.cshtmlRazor zobrazte soubory a pak vyberte Přidat a nahraďte stávající soubory.
Další informace najdete v tématu Zpracování požadavků pomocí kontrolerů v ASP.NET Core MVC a zobrazeních v ASP.NET Core MVC.
Testování jednotlivých metod
Každý koncový bod kontroleru je možné testovat, ale rozložení a styly jsou popsané dále v dokumentu.
- Spusťte aplikaci ASP.NET Core.
- Vyvolání vykreslených zobrazení z prohlížeče v běžící aplikaci ASP.NET Core nahrazením aktuálního čísla portu číslem portu použitým v projektu ASP.NET Core. Například:
https://localhost:44375/home/about.
Migrace statického obsahu
V ASP.NET MVC 5 nebo starším byl statický obsah hostovaný z kořenového adresáře webového projektu a byl intermixován se soubory na straně serveru. V ASP.NET Core se statické soubory ukládají do webového kořenového adresáře projektu. Výchozí adresář je {content root}/wwwroot, ale lze ho změnit. Další informace najdete v tématu Statické soubory v ASP.NET Core.
Zkopírujte statický obsah z projektu ASP.NET MVC WebApp1 do wwwroot adresáře v projektu ASP.NET Core WebApp1 :
- V projektu ASP.NET Core klikněte pravým tlačítkem myši na
wwwrootadresář a vyberte Přidat>existující položku. - V dialogovém okně Přidat existující položku přejděte do projektu ASP.NET MVC WebApp1 .
-
favicon.icoVyberte soubor a pak vyberte Přidat a nahraďte stávající soubor.
Migrace souborů rozložení
Zkopírujte soubory rozložení projektu ASP.NET MVC do projektu ASP.NET Core:
- V projektu ASP.NET Core klikněte pravým tlačítkem myši na
Viewsadresář a vyberte Přidat>existující položku. - V dialogovém okně Přidat existující položku přejděte do adresáře projektu ASP.NET MVC
Views. -
_ViewStart.cshtmlVyberte soubor a pak vyberte Přidat.
Zkopírujte soubory sdíleného rozložení projektu ASP.NET MVC do projektu ASP.NET Core:
- V projektu ASP.NET Core klikněte pravým tlačítkem myši na
Views/Sharedadresář a vyberte Přidat>existující položku. - V dialogovém okně Přidat existující položku přejděte do adresáře projektu ASP.NET MVC
Views/Shared. -
_Layout.cshtmlVyberte soubor a pak vyberte Přidat a nahraďte stávající soubor.
V projektu ASP.NET Core otevřete _Layout.cshtml soubor. Proveďte následující změny tak, aby odpovídaly dokončeného kódu uvedenému níže:
Aktualizujte zahrnutí šablon stylů CSS Bootstrap tak, aby odpovídalo dokončenému kódu níže.
- Nahraďte
@Styles.Render("~/Content/css")s elementem<link>, aby se načetlobootstrap.css(viz níže). - Odeberte
@Scripts.Render("~/bundles/modernizr").
Dokončený náhradní kód pro zahrnutí šablon stylů CSS bootstrap:
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
crossorigin="anonymous">
Aktualizujte zahrnutí javascriptu jQuery a Bootstrap tak, aby odpovídaly dokončeného kódu níže:
- Nahraďte
@Scripts.Render("~/bundles/jquery")elementem<script>(viz níže). - Nahraďte
@Scripts.Render("~/bundles/bootstrap")elementem<script>(viz níže).
Dokončený náhradní kód pro zahrnutí jQuery a Bootstrap JavaScript:
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.js"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
Aktualizovaný _Layout.cshtml soubor je uvedený níže:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title - My ASP.NET Application</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
crossorigin="anonymous">
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
@Html.ActionLink("Application name", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
</div>
</div>
</div>
<div class="container body-content">
@RenderBody()
<hr />
<footer>
<p>© @DateTime.Now.Year - My ASP.NET Application</p>
</footer>
</div>
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.js"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
@RenderSection("scripts", required: false)
</body>
</html>
Zobrazte web v prohlížeči. Měl by se vykreslit s očekávanými styly na místě.
Konfigurace sdružování a minifikace
ASP.NET Core je kompatibilní s několika opensourcovými řešeními pro sdružování a minifikace, jako je WebOptimizer a další podobné knihovny. ASP.NET Core neposkytuje nativní řešení sdružování a minifikace. Informace o konfiguraci sdružování a minifikace najdete v tématu Sdružování a minifikace.
Řešení chyb HTTP 500
Existuje mnoho problémů, které mohou způsobit chybovou zprávu HTTP 500, která neobsahuje žádné informace o zdroji problému. Pokud Views/_ViewImports.cshtml například soubor obsahuje obor názvů, který v projektu neexistuje, vygeneruje se chyba HTTP 500. Ve výchozím nastavení se v aplikacích ASP.NET Core přidá rozšíření do IApplicationBuilder a spustí se v prostředí Development. Toto je podrobně popsáno v následujícím kódu:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
}
ASP.NET Core převádí neošetřené výjimky na chybové odpovědi HTTP 500. Za normálních okolností se podrobnosti o chybách do těchto odpovědí nezahrnou, aby se zabránilo zpřístupnění potenciálně citlivých informací o serveru. Další informace najdete na stránce výjimek pro vývojáře.
Další kroky
- <identity.md>
Dodatečné zdroje
Tento článek ukazuje, jak začít migrovat projekt ASP.NET MVC na ASP.NET Core MVC 2.2. V procesu se zvýrazní mnoho věcí, které se změnily z ASP.NET MVC. Migrace z ASP.NET MVC je proces s více kroky. Tento článek se věnuje následujícím tématům:
- Počáteční nastavení
- Základní kontrolery a zobrazení
- Statický obsah
- Závislosti na straně klienta
Informace o migraci konfigurace a Identity kódu najdete v tématu <configuration.md> a <identity.md>.
Note
Čísla verzí v ukázkách nemusí být aktuální, odpovídajícím způsobem aktualizujte projekty.
Vytvoření počátečního projektu ASP.NET MVC
Pro předvedení upgradu začneme vytvořením aplikace ASP.NET MVC. Vytvořte ho s názvem WebApp1 , aby obor názvů odpovídal projektu ASP.NET Core vytvořený v dalším kroku.
Volitelný: Změňte název řešení z Webové aplikace1 na Mvc5. Visual Studio zobrazí nový název řešení (Mvc5), který usnadňuje přehled o tomto projektu z dalšího projektu.
Vytvoření projektu ASP.NET Core
Vytvořte novou prázdnou webovou aplikaci ASP.NET Core se stejným názvem jako předchozí projekt (WebApp1), aby se obory názvů ve dvou projektech shodovaly. Mít stejný obor názvů usnadňuje kopírování kódu mezi těmito dvěma projekty. Pokud chcete použít stejný název, vytvořte tento projekt v jiném adresáři než předchozí projekt.
- Volitelný: Vytvořte novou aplikaci ASP.NET Core pomocí šablony projektu webové aplikace . Pojmenujte projekt WebApp1 a vyberte možnost ověřování jednotlivých uživatelských účtů. Přejmenujte tuto aplikaci na FullAspNetCore. Vytvoření tohoto projektu šetří čas při převodu. Konečný výsledek lze zobrazit v kódu generovaném šablonou, kód lze zkopírovat do projektu převodu nebo porovnat s projektem vygenerovaným šablonou.
Konfigurace lokality pro použití MVC
- Při cílení na .NET Core se ve výchozím nastavení odkazuje na metabalíc Microsoft.AspNetCore.App . Tento balíček obsahuje balíčky běžně používané aplikacemi MVC. Pokud cílíte na rozhraní .NET Framework, odkazy na balíčky musí být uvedeny jednotlivě v souboru projektu.
Microsoft.AspNetCore.Mvc je architektura ASP.NET Core MVC.
Microsoft.AspNetCore.StaticFiles je handler statických souborů. ASP.NET Core aplikace si explicitně volí middleware, například pro obsluhu statických souborů. Další informace naleznete v tématu Statické soubory.
-
Startup.csOtevřete soubor a změňte kód tak, aby odpovídal následujícímu:
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
Metoda rozšíření UseStaticFiles přidá handler statických souborů. Další informace naleznete v tématu Spuštění a směrování aplikace.
Přidání kontroleru a zobrazení
V této části se přidá minimální kontroler a zobrazení, které slouží jako zástupné symboly pro kontroler ASP.NET MVC a zobrazení migrovaná v další části.
ControllersPřidejte adresář.Přidejte třídu kontroleru pojmenovanou
HomeController.csdoControllersadresáře.
ViewsPřidejte adresář.Views/HomePřidejte adresář.Razor Přidejte View s názvem
Index.cshtmldoViews/Homeadresáře.
Struktura projektu je znázorněna níže:
Views/Home/Index.cshtml Obsah souboru nahraďte následujícím kódem:
<h1>Hello world!</h1>
Spustit aplikaci.
Další informace naleznete v tématu Kontrolery a zobrazení.
Následující funkce vyžadují migraci z ukázkového projektu ASP.NET MVC do projektu ASP.NET Core:
obsah na straně klienta (CSS, písma a skripty)
controllers
views
models
bundling
filters
Přihlaste se/odhlaste se, Identity (To se provádí v dalším tutoriálu.)
Kontrolery a zobrazení
Zkopírujte všechny metody z ASP.NET MVC
HomeControllerdo novéhoHomeController. V ASP.NET MVC je návratový typ metody akce kontroleru šablony integrované ActionResult; v ASP.NET Core MVC vracejí metody akceIActionResultmísto toho.ActionResultimplementujeIActionResult, takže není nutné měnit návratový typ metod akce.Zkopírujte soubory zobrazení
About.cshtml,Contact.cshtml,Index.cshtmlRazor z projektu ASP.NET MVC do projektu ASP.NET Core.
Testování jednotlivých metod
Soubor rozložení a styly ještě nebyly migrovány, takže vykreslená zobrazení obsahují pouze obsah v souborech zobrazení. Soubor rozložení obsahující odkazy pro zobrazení About a Contact zatím nebudou k dispozici.
Vyvolejte vykreslené zobrazení z prohlížeče v běžící aplikaci ASP.NET Core tím, že nahradíte aktuální číslo portu číslem portu používaným v projektu ASP.NET Core. Například: https://localhost:44375/home/about.
Všimněte si chybějícího stylu a položek nabídky. Styl bude opraven v další sekci.
Statický obsah
V ASP.NET MVC 5 nebo starším byl statický obsah hostovaný z kořenového adresáře webového projektu a byl intermixován se soubory na straně serveru. V ASP.NET Core je statický obsah hostovaný v wwwroot adresáři. Zkopírujte statický obsah z aplikace ASP.NET MVC do wwwroot adresáře v projektu ASP.NET Core. V tomto ukázkovém převodu:
-
favicon.icoZkopírujte soubor z projektu ASP.NET MVC dowwwrootadresáře v projektu ASP.NET Core.
Projekt ASP.NET MVC používá metodu Bootstrap pro svůj styl a ukládá soubory Bootstrap do Content adresářů a Scripts adresářů. Šablona, která vygenerovala projekt ASP.NET MVC, odkazuje na Bootstrap v souboru rozložení (Views/Shared/_Layout.cshtml). Soubory bootstrap.js a bootstrap.css soubory je možné zkopírovat z projektu ASP.NET MVC do wwwroot adresáře v novém projektu. Místo toho tento dokument přidá podporu pro Bootstrap (a další knihovny na straně klienta) pomocí sítí CDN v další části.
Migrace souboru rozložení
_ViewStart.cshtmlZkopírujte soubor z adresáře projektu ASP.NET MVC do adresáře projektuViewsASP.NET CoreViews. V_ViewStart.cshtmlASP.NET Core MVC se soubor nezměnil.Vytvořte
Views/Sharedadresář.Volitelný: Zkopírujte
_ViewImports.cshtmlz adresáře projektuViewsMVC do adresáře projektu ASP.NET CoreViews. Odeberte všechny deklarace oboru názvů v souboru_ViewImports.cshtml. Soubor_ViewImports.cshtmlposkytuje obory názvů pro všechny zobrazovací soubory a přináší Tag Helpers. Pomocníci značek se používají v novém souboru rozvržení. Soubor_ViewImports.cshtmlje nový pro ASP.NET Core._Layout.cshtmlZkopírujte soubor z adresáře projektu ASP.NET MVC do adresáře projektuViews/SharedASP.NET CoreViews/Shared.
Otevřete _Layout.cshtml soubor a proveďte následující změny (dokončený kód je uvedený níže):
Nahraďte
@Styles.Render("~/Content/css")s elementem<link>, aby se načetlobootstrap.css(viz níže).Odeberte
@Scripts.Render("~/bundles/modernizr").Okomentujte řádek
@Html.Partial("_LoginPartial")(obklopte řádek@*...*@). Viz Migrace autentizace a Identity do ASP.NET Core pro více informací.Nahraďte
@Scripts.Render("~/bundles/jquery")elementem<script>(viz níže).Nahraďte
@Scripts.Render("~/bundles/bootstrap")elementem<script>(viz níže).
Náhradní kód pro zahrnutí stylů CSS Bootstrap
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
crossorigin="anonymous">
Náhradní kód pro zahrnutí jQuery a Bootstrap JavaScriptu:
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.js"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
Aktualizovaný _Layout.cshtml soubor je uvedený níže:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title - My ASP.NET Application</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
crossorigin="anonymous">
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
@Html.ActionLink("Application name", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
@*@Html.Partial("_LoginPartial")*@
</div>
</div>
</div>
<div class="container body-content">
@RenderBody()
<hr />
<footer>
<p>© @DateTime.Now.Year - My ASP.NET Application</p>
</footer>
</div>
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.js"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
crossorigin="anonymous"></script>
@RenderSection("scripts", required: false)
</body>
</html>
Zobrazte web v prohlížeči. Teď by se měl správně načíst s očekávanými styly.
- Volitelný: Zkuste použít nový soubor rozložení. Zkopírujte soubor rozložení z projektu FullAspNetCore . Nový soubor rozložení používá pomocníky značek a má další vylepšení.
Konfigurace sdružování a minifikace
Informace o konfiguraci sdružování a minifikace naleznete v tématu Sdružování a minifikace.
Řešení chyb HTTP 500
Existuje mnoho problémů, které mohou způsobit chybové zprávy HTTP 500, které neobsahují žádné informace o zdroji problému. Pokud Views/_ViewImports.cshtml například soubor obsahuje obor názvů, který v projektu neexistuje, vygeneruje se chyba HTTP 500. Ve výchozím nastavení se v aplikacích ASP.NET Core rozšíření přidá do IApplicationBuilder a spustí se, když je konfigurace nastavena na vývoj. Podívejte se na příklad v následujícím kódu:
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
ASP.NET Core převádí neošetřené výjimky na chybové odpovědi HTTP 500. Za normálních okolností se podrobnosti o chybách do těchto odpovědí nezahrnou, aby se zabránilo zpřístupnění potenciálně citlivých informací o serveru. Další informace najdete na stránce výjimek pro vývojáře.
Dodatečné zdroje
Tento článek ukazuje, jak začít migrovat projekt ASP.NET MVC na ASP.NET Core MVC 2.1. V procesu se zvýrazní mnoho věcí, které se změnily z ASP.NET MVC. Migrace z ASP.NET MVC je proces s více kroky. Tento článek se věnuje následujícím tématům:
- Počáteční nastavení
- Základní kontrolery a zobrazení
- Statický obsah
- Závislosti na straně klienta
Informace o migraci konfigurace a Identity kódu najdete v tématu Migrace konfigurace do ASP.NET Core a Migrace ověřování a Identity do ASP.NET Core.
Note
Čísla verzí v ukázkách nemusí být aktuální, odpovídajícím způsobem aktualizujte projekty.
Vytvoření počátečního projektu ASP.NET MVC
Pro předvedení upgradu začneme vytvořením aplikace ASP.NET MVC. Vytvořte ho s názvem WebApp1 , aby obor názvů odpovídal projektu ASP.NET Core vytvořený v dalším kroku.
Volitelný: Změňte název řešení z Webové aplikace1 na Mvc5. Visual Studio zobrazí nový název řešení (Mvc5), který usnadňuje přehled o tomto projektu z dalšího projektu.
Vytvoření projektu ASP.NET Core
Vytvořte novou prázdnou webovou aplikaci ASP.NET Core se stejným názvem jako předchozí projekt (WebApp1), aby se obory názvů ve dvou projektech shodovaly. Mít stejný obor názvů usnadňuje kopírování kódu mezi těmito dvěma projekty. Pokud chcete použít stejný název, vytvořte tento projekt v jiném adresáři než předchozí projekt.
- Volitelný: Vytvořte novou aplikaci ASP.NET Core pomocí šablony projektu webové aplikace . Pojmenujte projekt WebApp1 a vyberte možnost ověřování jednotlivých uživatelských účtů. Přejmenujte tuto aplikaci na FullAspNetCore. Vytvoření tohoto projektu šetří čas při převodu. Konečný výsledek lze zobrazit v kódu generovaném šablonou, kód lze zkopírovat do projektu převodu nebo porovnat s projektem vygenerovaným šablonou.
Konfigurace lokality pro použití MVC
- Při cílení na .NET Core se ve výchozím nastavení odkazuje na metabalíc Microsoft.AspNetCore.App . Tento balíček obsahuje balíčky běžně používané aplikacemi MVC. Pokud cílíte na rozhraní .NET Framework, odkazy na balíčky musí být uvedeny jednotlivě v souboru projektu.
Microsoft.AspNetCore.Mvc je architektura ASP.NET Core MVC.
Microsoft.AspNetCore.StaticFiles je handler statických souborů. ASP.NET Core aplikace si explicitně volí middleware, například pro obsluhu statických souborů. Další informace naleznete v tématu Statické soubory.
-
Startup.csOtevřete soubor a změňte kód tak, aby odpovídal následujícímu:
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
Metoda rozšíření UseStaticFiles přidá handler statických souborů. Metoda rozšíření UseMvc přidává směrování. Další informace naleznete v tématu Spuštění a směrování aplikace.
Přidání kontroleru a zobrazení
V této části se přidá minimální kontroler a zobrazení, které slouží jako zástupné symboly pro kontroler ASP.NET MVC a zobrazení migrovaná v další části.
ControllersPřidejte adresář.Přidejte třídu kontroleru pojmenovanou
HomeController.csdoControllersadresáře.
ViewsPřidejte adresář.Views/HomePřidejte adresář.Razor Přidejte View s názvem
Index.cshtmldoViews/Homeadresáře.
Struktura projektu je znázorněna níže:
Views/Home/Index.cshtml Obsah souboru nahraďte následujícím kódem:
<h1>Hello world!</h1>
Spustit aplikaci.
Další informace naleznete v tématu Kontrolery a zobrazení.
Následující funkce vyžadují migraci z ukázkového projektu ASP.NET MVC do projektu ASP.NET Core:
obsah na straně klienta (CSS, písma a skripty)
controllers
views
models
bundling
filters
Přihlaste se/odhlaste se, Identity (To se provádí v dalším tutoriálu.)
Kontrolery a zobrazení
Zkopírujte všechny metody z ASP.NET MVC
HomeControllerdo novéhoHomeController. V ASP.NET MVC je návratový typ metody akce kontroleru šablony integrované ActionResult; v ASP.NET Core MVC vracejí metody akceIActionResultmísto toho.ActionResultimplementujeIActionResult, takže není nutné měnit návratový typ metod akce.Zkopírujte soubory zobrazení
About.cshtml,Contact.cshtml,Index.cshtmlRazor z projektu ASP.NET MVC do projektu ASP.NET Core.
Testování jednotlivých metod
Soubor rozložení a styly ještě nebyly migrovány, takže vykreslená zobrazení obsahují pouze obsah v souborech zobrazení. Soubor rozložení obsahující odkazy pro zobrazení About a Contact zatím nebudou k dispozici.
- Vyvolejte vykreslené zobrazení z prohlížeče v běžící aplikaci ASP.NET Core tím, že nahradíte aktuální číslo portu číslem portu používaným v projektu ASP.NET Core. Například:
https://localhost:44375/home/about.
Všimněte si chybějícího stylu a položek nabídky. Styl bude opraven v další sekci.
Statický obsah
V ASP.NET MVC 5 nebo starším byl statický obsah hostovaný z kořenového adresáře webového projektu a byl intermixován se soubory na straně serveru. V ASP.NET Core je statický obsah hostovaný v wwwroot adresáři. Zkopírujte statický obsah z aplikace ASP.NET MVC do wwwroot adresáře v projektu ASP.NET Core. V tomto ukázkovém převodu:
-
favicon.icoZkopírujte soubor z projektu ASP.NET MVC dowwwrootadresáře v projektu ASP.NET Core.
Projekt ASP.NET MVC používá metodu Bootstrap pro svůj styl a ukládá soubory Bootstrap do Content adresářů a Scripts adresářů. Šablona, která vygenerovala projekt ASP.NET MVC, odkazuje na Bootstrap v souboru rozložení (Views/Shared/_Layout.cshtml). Soubory bootstrap.js a bootstrap.css soubory je možné zkopírovat z projektu ASP.NET MVC do wwwroot adresáře v novém projektu. Místo toho tento dokument přidá podporu pro Bootstrap (a další knihovny na straně klienta) pomocí sítí CDN v další části.
Migrace souboru rozložení
_ViewStart.cshtmlZkopírujte soubor z adresáře projektu ASP.NET MVC do adresáře projektuViewsASP.NET CoreViews. V_ViewStart.cshtmlASP.NET Core MVC se soubor nezměnil.Vytvořte
Views/Sharedadresář.Volitelný: Zkopírujte
_ViewImports.cshtmlz adresáře projektuViewsMVC do adresáře projektu ASP.NET CoreViews. Odeberte všechny deklarace oboru názvů v souboru_ViewImports.cshtml. Soubor_ViewImports.cshtmlposkytuje obory názvů pro všechny zobrazovací soubory a přináší Tag Helpers. Pomocníci značek se používají v novém souboru rozvržení. Soubor_ViewImports.cshtmlje nový pro ASP.NET Core._Layout.cshtmlZkopírujte soubor z adresáře projektu ASP.NET MVC do adresáře projektuViews/SharedASP.NET CoreViews/Shared.
Otevřete _Layout.cshtml soubor a proveďte následující změny (dokončený kód je uvedený níže):
Nahraďte
@Styles.Render("~/Content/css")s elementem<link>, aby se načetlobootstrap.css(viz níže).Odeberte
@Scripts.Render("~/bundles/modernizr").Okomentujte řádek
@Html.Partial("_LoginPartial")(obklopte řádek@*...*@). Viz Migrace autentizace a Identity do ASP.NET Core pro více informací.Nahraďte
@Scripts.Render("~/bundles/jquery")elementem<script>(viz níže).Nahraďte
@Scripts.Render("~/bundles/bootstrap")elementem<script>(viz níže).
Náhradní kód pro zahrnutí stylů CSS Bootstrap
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
crossorigin="anonymous">
Náhradní kód pro zahrnutí jQuery a Bootstrap JavaScriptu:
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.js"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
Aktualizovaný _Layout.cshtml soubor je uvedený níže:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title - My ASP.NET Application</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
crossorigin="anonymous">
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
@Html.ActionLink("Application name", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
@*@Html.Partial("_LoginPartial")*@
</div>
</div>
</div>
<div class="container body-content">
@RenderBody()
<hr />
<footer>
<p>© @DateTime.Now.Year - My ASP.NET Application</p>
</footer>
</div>
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.js"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
crossorigin="anonymous"></script>
@RenderSection("scripts", required: false)
</body>
</html>
Zobrazte web v prohlížeči. Teď by se měl správně načíst s očekávanými styly.
- Volitelný: Zkuste použít nový soubor rozložení. Zkopírujte soubor rozložení z projektu FullAspNetCore . Nový soubor rozložení používá pomocníky značek a má další vylepšení.
Konfigurace sdružování a minifikace
Informace o konfiguraci sdružování a minifikace naleznete v tématu Sdružování a minifikace.
Řešení chyb HTTP 500
Existuje mnoho problémů, které mohou způsobit chybové zprávy HTTP 500, které neobsahují žádné informace o zdroji problému. Pokud Views/_ViewImports.cshtml například soubor obsahuje obor názvů, který v projektu neexistuje, vygeneruje se chyba HTTP 500. Ve výchozím nastavení se v aplikacích ASP.NET Core rozšíření přidá do IApplicationBuilder a spustí se, když je konfigurace nastavena na vývoj. Podívejte se na příklad v následujícím kódu:
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
ASP.NET Core převádí neošetřené výjimky na chybové odpovědi HTTP 500. Za normálních okolností se podrobnosti o chybách do těchto odpovědí nezahrnou, aby se zabránilo zpřístupnění potenciálně citlivých informací o serveru. Další informace najdete na stránce výjimek pro vývojáře.