Sdílet prostřednictvím


Upgrade z ASP.NET MVC a webového rozhraní API na ASP.NET Core MVC

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

Vytvoření počátečního projektu ASP.NET MVC

Vytvořte příklad projektu ASP.NET MVC v sadě Visual Studio pro migraci:

  1. V nabídce Soubor vyberte Nový>projekt.
  2. Vyberte ASP.NET Web Application (.NET Framework) a pak vyberte Další.
  3. Pojmenujte projekt WebApp1 tak, aby obor názvů odpovídal projektu ASP.NET Core vytvořený v dalším kroku. Vyberte Vytvořit.
  4. 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:

  1. Spusťte druhou instanci sady Visual Studio.
  2. V nabídce Soubor vyberte Nový>projekt.
  3. Vyberte ASP.NET Základní webová aplikace a pak vyberte Další.
  4. V dialogovém okně Konfigurovat nový projekt pojmenujte projekt WebApp1.
  5. 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.
  6. 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.asax nahrazuje.
  • 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:

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 .

  1. Zkopírujte metody z ASP.NET MVC HomeController a nahraďte nové metody ASP.NET Core HomeController . 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. ActionResult implementuje IActionResult.
  2. V projektu ASP.NET Core klikněte pravým tlačítkem na zobrazení neboHome adresář a vyberte Přidat>existující položku.
  3. V dialogovém okně Přidat existující položku přejděte do adresáře projektu ASP.NET MVC Home.
  4. About.cshtmlVyberte položku , Contact.cshtmla Index.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.

  1. Spusťte aplikaci ASP.NET Core.
  2. 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 :

  1. V projektu ASP.NET Core klikněte pravým tlačítkem myši na wwwroot adresář a vyberte Přidat>existující položku.
  2. V dialogovém okně Přidat existující položku přejděte do projektu ASP.NET MVC WebApp1 .
  3. favicon.ico Vyberte 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:

  1. V projektu ASP.NET Core klikněte pravým tlačítkem myši na Views adresář a vyberte Přidat>existující položku.
  2. V dialogovém okně Přidat existující položku přejděte do adresáře projektu ASP.NET MVC Views.
  3. _ViewStart.cshtml Vyberte soubor a pak vyberte Přidat.

Zkopírujte soubory sdíleného rozložení projektu ASP.NET MVC do projektu ASP.NET Core:

  1. V projektu ASP.NET Core klikněte pravým tlačítkem myši na Views/Shared adresář a vyberte Přidat>existující položku.
  2. V dialogovém okně Přidat existující položku přejděte do adresáře projektu ASP.NET MVC Views/Shared.
  3. _Layout.cshtml Vyberte 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.

  1. Nahraďte @Styles.Render("~/Content/css") s elementem <link>, aby se načetlo bootstrap.css (viz níže).
  2. 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:

  1. Nahraďte @Scripts.Render("~/bundles/jquery") elementem <script> (viz níže).
  2. 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>&copy; @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.

Dialogové okno Nový projekt sady Visual Studio

Dialogové okno Nová webová aplikace: Šablona projektu MVC vybraná na panelu šablon ASP.NET

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.

Dialogové okno Nový projekt

Dialogové okno Nová ASP.NET webová aplikace: Prázdná šablona projektu vybraná na panelu ASP.NET Základní šablony

  • 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.cs Otevř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.

  • Controllers Přidejte adresář.

  • Přidejte třídu kontroleru pojmenovanou HomeController.cs do Controllers adresáře.

Dialogové okno Přidat novou položku s vybranou třídou kontroleru MVC

  • Views Přidejte adresář.

  • Views/Home Přidejte adresář.

  • Razor Přidejte View s názvem Index.cshtml do Views/Home adresáře.

Dialogové okno Přidat novou položku s vybraným zobrazením MVC stránky

Struktura projektu je znázorněna níže:

Průzkumník řešení zobrazující soubory a adresáře webové aplikace 1

Views/Home/Index.cshtml Obsah souboru nahraďte následujícím kódem:

<h1>Hello world!</h1>

Spustit aplikaci.

Webová aplikace otevřená v Microsoft Edgi

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 HomeController do nového HomeController. V ASP.NET MVC je návratový typ metody akce kontroleru šablony integrované ActionResult; v ASP.NET Core MVC vracejí metody akce IActionResult místo toho. ActionResult implementuje IActionResult, 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.

Stránka kontaktu

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.ico Zkopírujte soubor z projektu ASP.NET MVC do wwwroot adresář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.cshtml Zkopírujte soubor z adresáře projektu ASP.NET MVC do adresáře projektu Views ASP.NET CoreViews. V _ViewStart.cshtml ASP.NET Core MVC se soubor nezměnil.

  • Vytvořte Views/Shared adresář.

  • Volitelný: Zkopírujte _ViewImports.cshtml z adresáře projektu Views MVC do adresáře projektu ASP.NET CoreViews. Odeberte všechny deklarace oboru názvů v souboru _ViewImports.cshtml. Soubor _ViewImports.cshtml poskytuje 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.cshtml je nový pro ASP.NET Core.

  • _Layout.cshtml Zkopírujte soubor z adresáře projektu ASP.NET MVC do adresáře projektu Views/Shared ASP.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četlo bootstrap.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>&copy; @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.

Dialogové okno Nový projekt sady Visual Studio

Dialogové okno Nová webová aplikace: Šablona projektu MVC vybraná na panelu šablon ASP.NET

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.

Dialogové okno Nový projekt

Dialogové okno Nová ASP.NET webová aplikace: Prázdná šablona projektu vybraná na panelu ASP.NET Základní šablony

  • 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.cs Otevř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.

  • Controllers Přidejte adresář.

  • Přidejte třídu kontroleru pojmenovanou HomeController.cs do Controllers adresáře.

Dialogové okno Přidat novou položku s vybranou třídou kontroleru MVC (před vydáním ASP.NET Core 2.1)

  • Views Přidejte adresář.

  • Views/Home Přidejte adresář.

  • Razor Přidejte View s názvem Index.cshtml do Views/Home adresáře.

Dialogové okno Přidat novou položku s vybranou stránkou zobrazení MVC (před vydáním ASP.NET Core 2.1)

Struktura projektu je znázorněna níže:

Průzkumník řešení zobrazující soubory a adresáře webové aplikace 1

Views/Home/Index.cshtml Obsah souboru nahraďte následujícím kódem:

<h1>Hello world!</h1>

Spustit aplikaci.

Webová aplikace otevřená v Microsoft Edgi

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 HomeController do nového HomeController. V ASP.NET MVC je návratový typ metody akce kontroleru šablony integrované ActionResult; v ASP.NET Core MVC vracejí metody akce IActionResult místo toho. ActionResult implementuje IActionResult, 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.

Stránka kontaktu

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.ico Zkopírujte soubor z projektu ASP.NET MVC do wwwroot adresář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.cshtml Zkopírujte soubor z adresáře projektu ASP.NET MVC do adresáře projektu Views ASP.NET CoreViews. V _ViewStart.cshtml ASP.NET Core MVC se soubor nezměnil.

  • Vytvořte Views/Shared adresář.

  • Volitelný: Zkopírujte _ViewImports.cshtml z adresáře projektu Views MVC do adresáře projektu ASP.NET CoreViews. Odeberte všechny deklarace oboru názvů v souboru _ViewImports.cshtml. Soubor _ViewImports.cshtml poskytuje 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.cshtml je nový pro ASP.NET Core.

  • _Layout.cshtml Zkopírujte soubor z adresáře projektu ASP.NET MVC do adresáře projektu Views/Shared ASP.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četlo bootstrap.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>&copy; @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