Migrace z ASP.NET MVC do ASP.NET Core MVC

Tento článek ukazuje, jak začít s migrací projektu ASP.NET MVC do ASP.NET Core MVC. V tomto procesu 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:

  • Počáteční nastavení.
  • Základní kontrolery a zobrazení.
  • Statický obsah.
  • Závislosti na straně klienta.

Informace o migraci konfigurace a kódu najdete v tématu Migrace Identity konfigurace do ASP.NET Core a ověřování migrací Identity a na ASP.NET Core.

Požadavky

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

Vytvořte příklad ASP.NET MVC v Visual Studio migraci:

  1. V nabídce Soubor vyberte Nový > Project.
  2. Vyberte ASP.NET Web Application (.NET Framework) a pak vyberte Další.
  3. Pojmete projekt WebApp1 tak, aby obor názvů odpovídal ASP.NET Core projektu vytvořenému v dalším kroku. Vyberte Vytvořit.
  4. Vyberte MVC a pak vyberte Vytvořit.

Vytvoření ASP.NET Core projektu

Vytvořte nové řešení s novým projektem ASP.NET Core pro migraci na:

  1. Spusťte druhou instanci Visual Studio.
  2. V nabídce Soubor vyberte Nový > Project.
  3. Vyberte ASP.NET Core Web Application (Webová aplikace) a pak vyberte Next (Další).
  4. V dialogovém okně Configure your new project (Konfigurace nového projektu) pojmete projekt WebApp1.
  5. Nastavte umístění do jiného adresáře, než je předchozí projekt, a použijte 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ě Create a new ASP.NET Core Web Application (Vytvořit novou webovou aplikaci) zkontrolujte, že jsou vybrané .NET Core a ASP.NET Core 3.1. Vyberte šablonu projektu Webová aplikace (Model-View-Controller) a vyberte Vytvořit.

Konfigurace ASP.NET Core pro použití MVC

V ASP.NET Core 3.0 a novějších verzích už .NET Framework podporované cílové rozhraní. Váš projekt musí cílit na .NET Core. Sdílená ASP.NET Core, která zahrnuje MVC, je součástí instalace modulu runtime .NET Core. Při použití sady SDK v souboru projektu se automaticky odkazuje na Microsoft.NET.Sdk.Web sdílenou rozhraní:

<Project Sdk="Microsoft.NET.Sdk.Web">

Další informace najdete v referenčních informacích k rozhraní.

V ASP.NET Core třída Startup :

  • Nahradí Global.asax.
  • Zpracovává všechny úlohy po spuštění aplikace.

Další informace naleznete v tématu Spuštění aplikace v ASP.NET Core.

V ASP.NET Core projektu otevřete soubor Startup.cs:

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í vyjádřit výslovný souhlas s funkcemi architektury s middlewarem. Předchozí kód vygenerovaný šablonou přidá následující služby a middleware:

  • Metoda AddControllersWithViews rozšíření zaregistruje 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 UseStaticFiles rozšíření přidá statickou obslužnou rutinu souboru Microsoft.AspNetCore.StaticFiles . Rozšiřující UseStaticFiles metoda musí být volána před UseRouting . Další informace naleznete v tématu Statické soubory v ASP.NET Core.
  • Metoda UseRouting rozšíření přidá směrování. Další informace naleznete v tématu Směrování v ASP.NET Core.

Tato stávající konfigurace zahrnuje to, co je potřeba k migraci příkladu ASP.NET MVC. Další informace o možnostech 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 s použitím stejných názvů jako třídy kontroleru a zobrazení v libovolném projektu ASP.NET MVC, ze které se má migrovat.

Projekt ASP.NET Core WebApp1 už obsahuje minimální příklad kontroleru a zobrazení se stejným názvem jako ASP.NET MVC. Budou tedy sloužit jako zástupné symboly pro kontroler ASP.NET MVC a zobrazení, která se mají migrovat z ASP.NET webové aplikace MVC1.

  1. Zkopírujte metody z ASP.NET MVC HomeController a nahraďte nové ASP.NET Core HomeController metody. Návratový typ metod akce není nutné měnit. Metoda ASP.NET akce kontroleru MVC je typu ; v ASP.NET Core MVC se místo toho vrátí metody ActionResult IActionResult akce. ActionResult implementuje IActionResult .
  2. V ASP.NET Core projektu klikněte pravým tlačítkem na adresář Views/ Home a vyberte Add Existing Item (Přidat existující > položku).
  3. V dialogovém okně Přidat existující položku přejděte do ASP.NET views/ Home projektu MVC WebApp1.
  4. Vyberte soubory zobrazení About.cshtml, Contact.cshtml a Index.cshtml a pak vyberte Přidat a nahraďte Razor existující soubory.

Další informace naleznete v tématech zpracování požadavků s řadiči ve službě ASP.NET Core MVC a Zobrazení v ASP.NET Core MVC.

Testování jednotlivých metod

Každý koncový bod kontroleru je možné otestovat, ale rozložení a styly jsou kryty později v dokumentu.

  1. Spusťte ASP.NET Core aplikaci.
  2. Vykreslovaná zobrazení vyvolala z prohlížeče ve spuštěné aplikaci ASP.NET Core tak, že aktuální číslo portu nahradíte číslem portu použitým v ASP.NET Core projektu. Například, https://localhost:44375/home/about.

Migrace statického obsahu

V ASP.NET MVC 5 a starších verzích se statický obsah hostoval z kořenového adresáře webového projektu a promíchal se se soubory na straně serveru. V ASP.NET Core jsou statické soubory uložené v kořenovém adresáři webu projektu. Výchozí adresář je {content root}/wwwroot, ale můžete ho změnit. Další informace najdete v tématu Statické soubory v ASP.NET Core.

Zkopírujte statický obsah z ASP.NET webové aplikace MVC1 do adresáře wwwroot v projektu ASP.NET Core WebApp1:

  1. V ASP.NET Core klikněte pravým tlačítkem na adresář wwwroot 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. Vyberte soubor seriesicon.ico a pak vyberte Add (Přidat) a nahraďte existující soubor.

Migrace souborů rozložení

Zkopírujte ASP.NET rozložení projektu MVC do ASP.NET Core projektu:

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

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

  1. V projektu ASP.NET Core klikněte pravým tlačítkem na adresář Views/Shared a vyberte Add Existing Item (Přidat > existující položku).
  2. V dialogovém okně Přidat existující položku přejděte do ASP.NET nebo sdíleného adresáře projektu MVC WebApp1.
  3. Vyberte soubor _Layout.cshtml a pak vyberte Přidat a nahraďte existující soubor.

V ASP.NET Core projektu otevřete soubor _Layout.cshtml. Proveďte následující změny tak, aby odpovídaly dokončenému kódu zobrazenému níže:

Aktualizujte zahrnutí CSS bootstrap tak, aby odpovídalo dokončenému kódu níže:

  1. @Styles.Render("~/Content/css")Nahraďte <link> elementem pro načtení bootstrap.css (viz níže).
  2. Odeberte @Scripts.Render("~/bundles/modernizr") .

Hotový náhradní kód pro zahrnutí šablon stylů CSS bootstrap:

<link rel="stylesheet"
    href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
    integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
    crossorigin="anonymous">

Aktualizujte zahrnutí jQuery a Bootstrap v JavaScriptu tak, aby odpovídaly dokončeného kódu níže:

  1. @Scripts.Render("~/bundles/jquery")Nahraďte <script> elementem (viz níže).
  2. @Scripts.Render("~/bundles/bootstrap")Nahraďte <script> elementem (viz níže).

Hotový náhradní kód pro zahrnutí jQuery a Bootstrap JavaScriptu:

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
    integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>

Aktualizovaný soubor _Layout.cshtml je zobrazený 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.min.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.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
            integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
    @RenderSection("scripts", required: false)
</body>
</html>

Zobrazte web v prohlížeči. Měl by se vykreslovat s očekávanými styly.

Konfigurace sdružování a minifikace

ASP.NET Core je kompatibilní s několika open source řešeními a minifikace řešeními, jako je weboptimalizátor a další podobné knihovny. ASP.NET Core neposkytuje nativní řešení pro sdružování a minifikace. Informace o konfiguraci sdružování a minifikace najdete v článku 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. Například pokud soubor views/_ViewImports. cshtml obsahuje obor názvů, který v projektu neexistuje, je vygenerována chyba HTTP 500. ve výchozím nastavení se v ASP.NET Core aplikace UseDeveloperExceptionPage rozšíření přidá do IApplicationBuilder a spustí se při vývoji prostředí. 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řevede neošetřené výjimky na chybové odpovědi HTTP 500. V těchto odpovědích obvykle nejsou podrobnosti o chybě zahrnuty, aby nedocházelo k odhalení potenciálně citlivých informací o serveru. Další informace najdete na stránce s výjimkou vývojáře.

Další kroky

Další zdroje informací

tento článek ukazuje, jak spustit migraci projektu ASP.NET mvc do ASP.NET Core MVC 2,2. v tomto 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 popisuje:

  • Počáteční nastavení
  • Základní řadiče a zobrazení
  • Statický obsah
  • Závislosti na straně klienta.

Informace o migraci konfigurace a Identity kódu naleznete v tématu Migrace konfigurace do ASP.NET Core a Migrace ověřování a Identity ASP.NET Core .

Poznámka

Čísla verzí v ukázkách nemusí být aktuální, aktualizujte projekty odpovídajícím způsobem.

vytvoření projektu starter ASP.NET MVC

k předvedení upgradu začneme vytvořením ASP.NET aplikace MVC. vytvořte ho s názvem WebApp1 , aby obor názvů odpovídal ASP.NET Coremu projektu vytvořenému v dalším kroku.

Visual Studio dialog nový Project

dialog nové webové aplikace: šablona projektu MVC vybraná v panelu šablony ASP.NET

Volitelné: Změňte název řešení z WebApp1 na Mvc5. Visual Studio zobrazuje název nového řešení (Mvc5), který usnadňuje podávání tohoto projektu z dalšího projektu.

vytvoření projektu ASP.NET Core

vytvořte novou prázdnou ASP.NET Core webovou aplikaci se stejným názvem jako předchozí projekt (WebApp1), aby se obory názvů ve dvou projektech shodovaly. Stejný obor názvů usnadňuje kopírování kódu mezi dvěma projekty. Tento projekt vytvořte v jiném adresáři než předchozí projekt, abyste mohli použít stejný název.

Dialogové okno Nový projekt

dialog nové webové aplikace ASP.NET: prázdná šablona projektu vybraná v panelu šablony ASP.NET Core

  • 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. Při vytváření tohoto projektu se šetří čas v převodu. Konečný výsledek lze zobrazit v kódu generovaném šablonou, kód může být zkopírován do projektu pro převod nebo v porovnání s projektem generovaným šablonou.

Konfigurace lokality pro použití MVC

  • Při cílení na .NET Core se ve výchozím nastavení odkazuje na Microsoft.AspNetCore.app Metapackage . Tento balíček obsahuje balíčky běžně používané aplikacemi MVC. pokud cílíte .NET Framework, musí být odkazy na balíček uvedeny jednotlivě v souboru projektu.

Microsoft.AspNetCore.Mvcje ASP.NET Core architekturu MVC. Microsoft.AspNetCore.StaticFiles je obslužná rutina statického souboru. aplikace ASP.NET Core výslovně přihlašovat pro middleware, například pro obsluhu statických souborů. Další informace najdete v tématu statické soubory.

  • Otevřete soubor Startup. cs 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?}");
        });
    }
}

UseStaticFilesMetoda rozšíření přidá obslužnou rutinu statického souboru. Další informace najdete v tématu spuštění a Směrováníaplikace.

Přidat kontroler a zobrazení

v této části se přidávají minimální kontroler a zobrazení, které slouží jako zástupné symboly pro ASP.NET kontroler MVC a zobrazení migrovaných v další části.

  • Přidejte adresář řadičů .

  • Do adresáře Controllers přidejte třídu Controller s názvem Home Controller. cs .

Dialogové okno Přidat novou položku se zvolenou třídou kontroleru MVC

  • Přidejte adresář zobrazení .

  • Přidat zobrazení/ Home adresář

  • Přidejte Razor zobrazení s názvem index. cshtml do zobrazení/ Home adresář.

Dialogové okno Přidat novou položku se zvolenou stránkou zobrazení MVC

Struktura projektu je zobrazena níže:

Průzkumník řešení zobrazení souborů a adresářů WebApp1

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

<h1>Hello world!</h1>

Spusťte aplikaci.

Otevřená webová aplikace v Microsoft Edge

Další informace najdete v tématu řadiče a zobrazení.

následující funkce vyžadují migraci z příkladu ASP.NET projektu MVC do projektu ASP.NET Core:

  • obsah na straně klienta (šablony stylů CSS, písma a skripty)

  • kontrolery

  • zobrazení

  • modely

  • sdružování

  • filtry

  • Přihlaste se nebo se přihlaste Identity (to se provádí v dalším kurzu).

Řadiče a zobrazení

  • zkopírujte všechny metody z ASP.NET MVC HomeController do nové HomeController . ve službě ASP.NET mvc je jako návratový typ metody typu "předdefinovaná metoda" nastavena metoda akce kontroleru ActionResult . v ASP.NET Core MVC se místo toho vrátí metody akcí IActionResult . ActionResult implementuje IActionResult , takže není nutné měnit návratový typ metod akce.

  • zkopírujte soubory About. cshtml, Contact. cshtml a Index. cshtml Razor zobrazení z projektu ASP.NET MVC do projektu ASP.NET Core.

Testování jednotlivých metod

Soubor rozložení a styly nebyly dosud migrovány, takže vykreslená zobrazení obsahují pouze obsah v zobrazení souborů. Soubory rozložení vygenerované odkazy pro About zobrazení a Contact nebudou zatím k dispozici.

vyvolání vykreslených zobrazení z prohlížeče na běžící ASP.NET základní aplikace nahrazením aktuálního čísla portu číslem portu použitým v projektu ASP.NET core. Příklad: https://localhost:44375/home/about.

Stránka kontaktu

Všimněte si nedostatku stylů a položek nabídky. Styl bude opraven v následující části.

Statický obsah

v ASP.NET MVC 5 a starší byl statický obsah hostovaný z kořenového adresáře webového projektu a byl vzájemně promíchán se soubory na straně serveru. v ASP.NET Core je statický obsah hostovaný v adresáři wwwroot . zkopírujte statický obsah z aplikace ASP.NET MVC do adresáře wwwroot v projektu ASP.NET Core. V tomto ukázkovém převodu:

  • zkopírujte soubor favicon. ico z projektu ASP.NET MVC do adresáře wwwroot v projektu ASP.NET Core.

projekt ASP.NET MVC používá pro svůj styl bootstrap a ukládá spouštěcí soubory do adresářů obsahu a skriptů . šablona, která vygenerovala ASP.NET projekt MVC, odkazuje na Bootstrap v souboru rozložení (views/shared/_Layout. cshtml). soubory bootstrap.js a bootstrap. css mohou být zkopírovány z projektu ASP.NET MVC do adresáře wwwroot 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 následující části.

Migrovat soubor rozložení

  • zkopírujte soubor _ViewStart. cshtml z adresáře zobrazení projektu ASP.NET MVC do adresáře zobrazení projektu ASP.NET Core. soubor _ViewStart. cshtml se v ASP.NET Core MVC nezměnil.

  • Vytvořte zobrazení/sdílený adresář.

  • Volitelné: zkopírujte _ViewImports. cshtml z adresáře zobrazení projektu FullAspNetCore MVC do adresáře zobrazení projektu ASP.NET Core. Odeberte všechny deklarace oboru názvů v souboru _ViewImports. cshtml . Soubor _ViewImports. cshtml poskytuje obory názvů pro všechny soubory zobrazení a přináší pomocníkům značek. V novém souboru rozložení se používají pomocníky značek. Soubor _ViewImports. cshtml je pro ASP.NET Core nový.

  • zkopírujte soubor _Layout. cshtml ze zobrazení/sdíleného adresáře projektu ASP.NET MVC do zobrazení/ sdíleného adresáře projektu ASP.NET Core.

Otevřete soubor _Layout. cshtml a proveďte následující změny (dokončený kód je zobrazen níže):

  • Nahraďte @Styles.Render("~/Content/css") <link> elementem pro načtení bootstrap. CSS (viz níže).

  • Odebrat @Scripts.Render("~/bundles/modernizr") .

  • Odkomentujte @Html.Partial("_LoginPartial") řádek kolem řádku (Obklopte řádek s @*...*@ ). Další informace najdete v tématu migrace ověřování a Identity ASP.NET Core

  • Nahraďte @Scripts.Render("~/bundles/jquery") <script> elementem (viz níže).

  • Nahraďte @Scripts.Render("~/bundles/bootstrap") <script> elementem (viz níže).

Náhradní značky pro spuštění šablony stylů Bootstrap:

<link rel="stylesheet"
    href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
    integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
    crossorigin="anonymous">

Náhradní označení pro zahrnutí a zavedení JavaScriptu:

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
    integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>

Aktualizovaný soubor _Layout. cshtml 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.min.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.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
            integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
            crossorigin="anonymous"></script>
    @RenderSection("scripts", required: false)
</body>
</html>

Zobrazí web v prohlížeči. Měl by se teď 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 tom, jak nakonfigurovat sdružování a minifikace, najdete v článku 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. Například pokud soubor views/_ViewImports. cshtml obsahuje obor názvů, který v projektu neexistuje, je vygenerována chyba HTTP 500. ve výchozím nastavení se v ASP.NET Core aplikace UseDeveloperExceptionPage rozšíření přidá do IApplicationBuilder a spustí se při vývoji konfigurace. 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řevede neošetřené výjimky na chybové odpovědi HTTP 500. V těchto odpovědích obvykle nejsou podrobnosti o chybě zahrnuty, aby nedocházelo k odhalení potenciálně citlivých informací o serveru. Další informace najdete na stránce s výjimkou vývojáře.

Další zdroje informací

tento článek ukazuje, jak spustit migraci projektu ASP.NET mvc do ASP.NET Core MVC 2,1. v tomto 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 popisuje:

  • Počáteční nastavení
  • Základní řadiče 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 ASP.NET Core.

Poznámka

Čísla verzí v ukázkách nemusí být aktuální, aktualizujte projekty odpovídajícím způsobem.

vytvoření projektu starter ASP.NET MVC

k předvedení upgradu začneme vytvořením ASP.NET aplikace MVC. vytvořte ho s názvem WebApp1 , aby obor názvů odpovídal ASP.NET Coremu projektu vytvořenému v dalším kroku.

Visual Studio dialog nový Project

dialog nové webové aplikace: šablona projektu MVC vybraná v panelu šablony ASP.NET

Volitelné: Změňte název řešení z WebApp1 na Mvc5. Visual Studio zobrazuje název nového řešení (Mvc5), který usnadňuje podávání tohoto projektu z dalšího projektu.

vytvoření projektu ASP.NET Core

vytvořte novou prázdnou ASP.NET Core webovou aplikaci se stejným názvem jako předchozí projekt (WebApp1), aby se obory názvů ve dvou projektech shodovaly. Stejný obor názvů usnadňuje kopírování kódu mezi dvěma projekty. Tento projekt vytvořte v jiném adresáři než předchozí projekt, abyste mohli použít stejný název.

Dialogové okno Nový projekt

dialog nové webové aplikace ASP.NET: prázdná šablona projektu vybraná v panelu šablony ASP.NET Core

  • 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. Při vytváření tohoto projektu se šetří čas v převodu. Konečný výsledek lze zobrazit v kódu generovaném šablonou, kód může být zkopírován do projektu pro převod nebo v porovnání s projektem generovaným šablonou.

Konfigurace lokality pro použití MVC

  • Při cílení na .NET Core se ve výchozím nastavení odkazuje na Microsoft.AspNetCore.app Metapackage . Tento balíček obsahuje balíčky běžně používané aplikacemi MVC. pokud cílíte .NET Framework, musí být odkazy na balíček uvedeny jednotlivě v souboru projektu.

Microsoft.AspNetCore.Mvcje ASP.NET Core architekturu MVC. Microsoft.AspNetCore.StaticFiles je obslužná rutina statického souboru. aplikace ASP.NET Core výslovně přihlašovat pro middleware, například pro obsluhu statických souborů. Další informace najdete v tématu statické soubory.

  • Otevřete soubor Startup. cs 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?}");
        });
    }
}

UseStaticFilesMetoda rozšíření přidá obslužnou rutinu statického souboru. UseMvcMetoda rozšíření přidává směrování. Další informace najdete v tématu spuštění a Směrováníaplikace.

Přidat kontroler a zobrazení

v této části se přidávají minimální kontroler a zobrazení, které slouží jako zástupné symboly pro ASP.NET kontroler MVC a zobrazení migrovaných v další části.

  • Přidejte adresář řadičů .

  • Do adresáře Controllers přidejte třídu Controller s názvem Home Controller. cs .

dialogové okno přidat novou položku se zvolenou třídou kontroleru MVC (před vydáním ASP.NET Core 2,1)

  • Přidejte adresář zobrazení .

  • Přidat zobrazení/ Home adresář

  • Přidejte Razor zobrazení s názvem index. cshtml do zobrazení/ Home adresář.

dialogové okno přidat novou položku se zvolenou stránkou zobrazení MVC (před vydáním ASP.NET Core 2,1)

Struktura projektu je zobrazena níže:

Průzkumník řešení zobrazení souborů a adresářů WebApp1

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

<h1>Hello world!</h1>

Spusťte aplikaci.

Otevřená webová aplikace v Microsoft Edge

Další informace najdete v tématu řadiče a zobrazení.

následující funkce vyžadují migraci z příkladu ASP.NET projektu MVC do projektu ASP.NET Core:

  • obsah na straně klienta (šablony stylů CSS, písma a skripty)

  • kontrolery

  • zobrazení

  • modely

  • sdružování

  • filtry

  • Přihlaste se nebo se přihlaste Identity (to se provádí v dalším kurzu).

Řadiče a zobrazení

  • zkopírujte všechny metody z ASP.NET MVC HomeController do nové HomeController . ve službě ASP.NET mvc je jako návratový typ metody typu "předdefinovaná metoda" nastavena metoda akce kontroleru ActionResult . v ASP.NET Core MVC se místo toho vrátí metody akcí IActionResult . ActionResult implementuje IActionResult , takže není nutné měnit návratový typ metod akce.

  • zkopírujte soubory About. cshtml, Contact. cshtml a Index. cshtml Razor zobrazení z projektu ASP.NET MVC do projektu ASP.NET Core.

Testování jednotlivých metod

Soubor rozložení a styly nebyly dosud migrovány, takže vykreslená zobrazení obsahují pouze obsah v zobrazení souborů. Soubory rozložení vygenerované odkazy pro About zobrazení a Contact nebudou zatím k dispozici.

  • vyvolání vykreslených zobrazení z prohlížeče na běžící ASP.NET základní aplikace nahrazením aktuálního čísla portu číslem portu použitým v projektu ASP.NET core. Příklad: https://localhost:44375/home/about.

Stránka kontaktu

Všimněte si nedostatku stylů a položek nabídky. Styl bude opraven v následující části.

Statický obsah

v ASP.NET MVC 5 a starší byl statický obsah hostovaný z kořenového adresáře webového projektu a byl vzájemně promíchán se soubory na straně serveru. v ASP.NET Core je statický obsah hostovaný v adresáři wwwroot . zkopírujte statický obsah z aplikace ASP.NET MVC do adresáře wwwroot v projektu ASP.NET Core. V tomto ukázkovém převodu:

  • zkopírujte soubor favicon. ico z projektu ASP.NET MVC do adresáře wwwroot v projektu ASP.NET Core.

projekt ASP.NET MVC používá pro svůj styl bootstrap a ukládá spouštěcí soubory do adresářů obsahu a skriptů . šablona, která vygenerovala ASP.NET projekt MVC, odkazuje na Bootstrap v souboru rozložení (views/shared/_Layout. cshtml). soubory bootstrap.js a bootstrap. css mohou být zkopírovány z projektu ASP.NET MVC do adresáře wwwroot 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 následující části.

Migrovat soubor rozložení

  • zkopírujte soubor _ViewStart. cshtml z adresáře zobrazení projektu ASP.NET MVC do adresáře zobrazení projektu ASP.NET Core. soubor _ViewStart. cshtml se v ASP.NET Core MVC nezměnil.

  • Vytvořte zobrazení/sdílený adresář.

  • Volitelné: zkopírujte _ViewImports. cshtml z adresáře zobrazení projektu FullAspNetCore MVC do adresáře zobrazení projektu ASP.NET Core. Odeberte všechny deklarace oboru názvů v souboru _ViewImports. cshtml . Soubor _ViewImports. cshtml poskytuje obory názvů pro všechny soubory zobrazení a přináší pomocníkům značek. V novém souboru rozložení se používají pomocníky značek. Soubor _ViewImports. cshtml je pro ASP.NET Core nový.

  • zkopírujte soubor _Layout. cshtml ze zobrazení/sdíleného adresáře projektu ASP.NET MVC do zobrazení/ sdíleného adresáře projektu ASP.NET Core.

Otevřete soubor _Layout. cshtml a proveďte následující změny (dokončený kód je zobrazen níže):

  • Nahraďte @Styles.Render("~/Content/css") <link> elementem pro načtení bootstrap. CSS (viz níže).

  • Odebrat @Scripts.Render("~/bundles/modernizr") .

  • Odkomentujte @Html.Partial("_LoginPartial") řádek kolem řádku (Obklopte řádek s @*...*@ ). Další informace najdete v tématu migrace ověřování a Identity ASP.NET Core

  • Nahraďte @Scripts.Render("~/bundles/jquery") <script> elementem (viz níže).

  • Nahraďte @Scripts.Render("~/bundles/bootstrap") <script> elementem (viz níže).

Náhradní značky pro spuštění šablony stylů Bootstrap:

<link rel="stylesheet"
    href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
    integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
    crossorigin="anonymous">

Náhradní označení pro zahrnutí a zavedení JavaScriptu:

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
    integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>

Aktualizovaný soubor _Layout. cshtml 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.min.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.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
            integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
            crossorigin="anonymous"></script>
    @RenderSection("scripts", required: false)
</body>
</html>

Zobrazí web v prohlížeči. Měl by se teď 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 tom, jak nakonfigurovat sdružování a minifikace, najdete v článku 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. Například pokud soubor views/_ViewImports. cshtml obsahuje obor názvů, který v projektu neexistuje, je vygenerována chyba HTTP 500. ve výchozím nastavení se v ASP.NET Core aplikace UseDeveloperExceptionPage rozšíření přidá do IApplicationBuilder a spustí se při vývoji konfigurace. 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řevede neošetřené výjimky na chybové odpovědi HTTP 500. V těchto odpovědích obvykle nejsou podrobnosti o chybě zahrnuty, aby nedocházelo k odhalení potenciálně citlivých informací o serveru. Další informace najdete na stránce s výjimkou vývojáře.

Další materiály