Teilen über


Upgrade von ASP.NET MVC und Web-API auf ASP.NET Core MVC

In diesem Artikel wird gezeigt, wie Sie mit der Migration eines ASP.NET MVC-Projekts zu ASP.NET Core MVC beginnen. Dabei werden verwandte Änderungen von ASP.NET MVC hervorgehoben.

Die Migration von ASP.NET MVC ist ein mehrstufiger Prozess. In diesem Artikel wird Folgendes behandelt:

  • Anfängliches Setup.
  • Grundlegende Controller und Ansichten
  • Statischer Inhalt.
  • Clientseitige Abhängigkeiten.

Informationen zum Migrieren von Konfiguration und Identity Code finden Sie unter Migrieren der Konfiguration zu ASP.NET Core und Migrieren der Authentifizierung und Identity zum ASP.NET Core.

Prerequisites

Erstellen des Startprojekts ASP.NET MVC

Erstellen Sie ein Beispiel ASP.NET MVC-Projekt in Visual Studio zum Migrieren:

  1. Klicken Sie im Menü Datei auf Neu>Projekt.
  2. Wählen Sie ASP.NET Webanwendung (.NET Framework) und dann "Weiter" aus.
  3. Benennen Sie das Projekt WebApp1 , damit der Namespace dem im nächsten Schritt erstellten ASP.NET Core-Projekt entspricht. Wählen Sie "Erstellen" aus.
  4. Wählen Sie MVC und dann "Erstellen" aus.

Erstellen des ASP.NET Core-Projekts

Erstellen Sie eine neue Lösung mit einem neuen ASP.NET Core-Projekt, zu dem Sie migrieren möchten:

  1. Starten Sie eine zweite Instanz von Visual Studio.
  2. Klicken Sie im Menü Datei auf Neu>Projekt.
  3. Wählen Sie ASP.NET Core-Webanwendung und dann "Weiter" aus.
  4. Benennen Sie im Dialogfeld " Neues Projekt konfigurieren " das Projekt "WebApp1".
  5. Legen Sie den Speicherort auf ein anderes Verzeichnis als das vorherige Projekt fest, um denselben Projektnamen zu verwenden. Die Verwendung desselben Namespace erleichtert das Kopieren von Code zwischen den beiden Projekten. Wählen Sie "Erstellen" aus.
  6. Vergewissern Sie sich im Dialogfeld Erstellen eines neuen ASP.NET Core-Webanwendungs-, dass .NET Core und ASP.NET Core 3.1- ausgewählt sind. Wählen Sie die Projektvorlage " Webanwendung" (Modell-View-Controller) und dann "Erstellen" aus.

Konfigurieren der ASP.NET Core-Website für die Verwendung von MVC

In ASP.NET Core 3.0- oder höher-Projekten ist .NET Framework kein unterstütztes Zielframework mehr. Ihr Projekt muss .NET Core als Ziel festlegen. Das ASP.NET core shared framework, das MVC enthält, ist Teil der .NET Core-Laufzeitinstallation. Auf das freigegebene Framework wird automatisch verwiesen, wenn das Microsoft.NET.Sdk.Web SDK in der Projektdatei verwendet wird:

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

Weitere Informationen finden Sie unter Framework-Referenz.

In ASP.NET Core ist die Klasse Startup:

  • Global.asax Ersetzt.
  • Behandelt alle App-Startaufgaben.

Weitere Informationen finden Sie unter Anwendungsstart in ASP.NET Core.

Öffnen Sie im ASP.NET Core-Projekt die Startup.cs Datei:

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-Apps müssen sich für Frameworkfeatures mit Middleware entscheiden. Der vorherige vom Vorlagen generierte Code fügt die folgenden Dienste und Middleware hinzu:

Diese vorhandene Konfiguration enthält, was zum Migrieren des Beispiels ASP.NET MVC-Projekts erforderlich ist. Weitere Informationen zu ASP.NET Core Middleware-Optionen finden Sie im App-Start in ASP.NET Core.

Migrieren von Controllern und Ansichten

Im ASP.NET Core-Projekt wird eine neue leere Controllerklasse und Ansichtsklasse hinzugefügt, die als Platzhalter mit denselben Namen wie die Controller- und Ansichtsklassen in jedem ASP.NET MVC-Projekt verwendet werden, aus dem migriert werden soll.

Das ASP.NET Core WebApp1-Projekt enthält bereits einen minimalen Beispielcontroller und eine Ansicht mit demselben Namen wie das ASP.NET MVC-Projekts. Diese dienen also als Platzhalter für den ASP.NET MVC-Controller und -Ansichten, die aus dem ASP.NET MVC WebApp1-Projekt migriert werden sollen.

  1. Kopieren Sie die Methoden aus dem ASP.NET MVC HomeController , um die neuen ASP.NET Core-Methoden HomeController zu ersetzen. Es ist nicht erforderlich, den Rückgabetyp der Aktionsmethoden zu ändern. Der Rückgabetyp der eingebauten Controlleraktionsmethode der ASP.NET-MVC-Vorlage ist ActionResult; in ASP.NET Core MVC geben die Aktionsmethoden stattdessen IActionResult zurück. ActionResult implementiert IActionResult.
  2. Klicken Sie im ASP.NET Core-Projekt mit der rechten Maustaste auf das Verzeichnis "Ansichten/HomeVerzeichnis", und wählen Sie "Vorhandenes Element> aus.
  3. Navigieren Sie im Dialogfeld "Vorhandenes Element hinzufügen" zum AnsichtenVerzeichnis des ASP.NET MVC Home.
  4. Wählen Sie die Ansichtsdateien About.cshtml, Contact.cshtml und Index.cshtmlRazor aus, dann wählen Sie Hinzufügen aus, um die vorhandenen Dateien zu ersetzen.

Weitere Informationen finden Sie unter Behandeln von Anforderungen mit Controllern in ASP.NET Core MVC und Views in ASP.NET Core MVC.

Jede Methode testen

Jeder Controllerendpunkt kann jedoch getestet werden, Layout und Formatvorlagen werden später im Dokument behandelt.

  1. Führen Sie die ASP.NET Core-App aus.
  2. Rufen Sie die gerenderten Ansichten aus dem Browser auf der ausgeführten ASP.NET Core-App auf, indem Sie die aktuelle Portnummer durch die portnummer ersetzen, die im ASP.NET Core-Projekt verwendet wird. Beispiel: https://localhost:44375/home/about.

Migrieren statischer Inhalte

In ASP.NET MVC 5 oder früheren Versionen wurde statischer Inhalt aus dem Stammverzeichnis des Webprojekts gehostet und mit serverseitigen Dateien vermischt. In ASP.NET Core werden statische Dateien im Webstammverzeichnis des Projekts gespeichert. Das Standardverzeichnis ist {content root}/wwwroot, kann aber geändert werden. Weitere Informationen finden Sie unter Statische Dateien in ASP.NET Core.

Kopieren Sie den statischen Inhalt aus dem ASP.NET MVC WebApp1-Projekt in das wwwroot Verzeichnis im ASP.NET Core WebApp1-Projekt :

  1. Klicken Sie im ASP.NET Core-Projekt mit der rechten Maustaste auf das wwwroot Verzeichnis, und wählen Sie "Vorhandenes Element> aus.
  2. Navigieren Sie im Dialogfeld " Vorhandenes Element hinzufügen " zum ASP.NET MVC WebApp1-Projekts .
  3. Wählen Sie die favicon.ico Datei und dann "Hinzufügen" aus, und ersetzen Sie die vorhandene Datei.

Migrieren der Layoutdateien

Kopieren Sie die ASP.NET MVC-Projektlayoutdateien in das ASP.NET Core-Projekt:

  1. Klicken Sie im ASP.NET Core-Projekt mit der rechten Maustaste auf das Views Verzeichnis, und wählen Sie "Vorhandenes Element> aus.
  2. Navigieren Sie im Dialogfeld "Vorhandenes Element hinzufügen" zum Verzeichnis des ASP.NET MVC WebApp1-ProjektsViews.
  3. Wählen Sie die _ViewStart.cshtml Datei und dann "Hinzufügen" aus.

Kopieren Sie die freigegebenen Layout-Dateien des ASP.NET MVC-Projekts in das ASP.NET Core-Projekt.

  1. Klicken Sie im ASP.NET Core-Projekt mit der rechten Maustaste auf das Views/Shared Verzeichnis, und wählen Sie "Vorhandenes Element> aus.
  2. Navigieren Sie im Dialogfeld "Vorhandenes Element hinzufügen" zum Verzeichnis des ASP.NET MVC WebApp1-ProjektsViews/Shared.
  3. Wählen Sie die _Layout.cshtml Datei und dann "Hinzufügen" aus, und ersetzen Sie die vorhandene Datei.

Öffnen Sie die Datei _Layout.cshtml im ASP.NET Core-Projekt. Nehmen Sie die folgenden Änderungen vor, um mit dem unten gezeigten abgeschlossenen Code übereinzugleichen:

Aktualisieren Sie die Bootstrap-CSS-Inklusion so, dass sie dem abgeschlossenen Code unten entspricht:

  1. Ersetzen Sie @Styles.Render("~/Content/css") durch ein <link> Element, um bootstrap.css zu laden (siehe unten).
  2. Entfernen Sie @Scripts.Render("~/bundles/modernizr").

Das vollständige Ersatzmarkup für die Bootstrap-CSS-Einbindung:

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

Aktualisieren Sie die jQuery- und Bootstrap-JavaScript-Inklusion so, dass sie dem abgeschlossenen Code unten entspricht:

  1. Ersetzen Sie @Scripts.Render("~/bundles/jquery") durch ein <script>-Element (siehe unten).
  2. Ersetzen Sie @Scripts.Render("~/bundles/bootstrap") durch ein <script>-Element (siehe unten).

Das vollständige Ersetzungsmarkup für die Einbindung von jQuery und 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>

Die aktualisierte _Layout.cshtml Datei wird unten angezeigt:

<!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>

Zeigen Sie die Website im Browser an. Sie sollte mit den erwarteten Formatvorlagen gerendert werden.

Konfigurieren von Bündelung und Minimierung

ASP.NET Core ist mit mehreren Open Source-Bündelungs- und Minifizierungslösungen wie WebOptimizer und anderen ähnlichen Bibliotheken kompatibel. ASP.NET Core bietet keine native Bündelungs- und Minimierungslösung. Informationen zum Konfigurieren von Bündelung und Minimierung finden Sie unter "Bundling and Minification".

Beheben von HTTP 500-Fehlern

Es gibt viele Probleme, die eine HTTP 500-Fehlermeldung verursachen können, die keine Informationen zur Quelle des Problems enthält. Wenn die Views/_ViewImports.cshtml Datei beispielsweise einen Namespace enthält, der im Projekt nicht vorhanden ist, wird ein HTTP 500-Fehler generiert. Standardmäßig wird in ASP.NET Core-Apps die UseDeveloperExceptionPage Erweiterung der IApplicationBuilder hinzugefügt und ausgeführt, wenn die Umgebung Entwicklung ist. Dies ist im folgenden Code beschrieben:

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 konvertiert unbehandelte Ausnahmen in HTTP 500-Fehlerantworten. Normalerweise sind Fehlerdetails in diesen Antworten nicht enthalten, um die Offenlegung potenziell vertraulicher Informationen über den Server zu verhindern. Weitere Informationen finden Sie in der Seite „Entwickler-Ausnahmeseite“.

Nächste Schritte

  • <identity.md>

Weitere Ressourcen

In diesem Artikel wird gezeigt, wie Sie mit der Migration eines ASP.NET MVC-Projekts zu ASP.NET Core MVC 2.2 beginnen. Dabei werden viele der Dinge hervorgehoben, die sich von ASP.NET MVC geändert haben. Die Migration von ASP.NET MVC ist ein mehrstufiger Prozess. In diesem Artikel wird Folgendes behandelt:

  • Anfangssetup
  • Grundlegende Controller und Ansichten
  • Statischer Inhalt
  • Clientseitige Abhängigkeiten.

Informationen zum Migrieren von Konfiguration und Identity Code finden Sie unter <configuration.md> und <identity.md>.

Note

Die Versionsnummern in den Beispielen sind möglicherweise nicht aktuell, aktualisieren sie die Projekte entsprechend.

Erstellen des Startprojekts ASP.NET MVC

Um das Upgrade zu veranschaulichen, erstellen wir zunächst eine ASP.NET MVC-App. Erstellen Sie es mit dem Namen WebApp1 , damit der Namespace mit dem im nächsten Schritt erstellten ASP.NET Core-Projekt übereinstimmt.

Visual Studio-Dialogfeld

Dialogfeld

Wahlfrei: Ändern Sie den Namen der Lösung von WebApp1 in Mvc5. Visual Studio zeigt den neuen Namen der Projektmappe (Mvc5) an, was es einfacher macht, dieses Projekt von dem nächsten zu unterscheiden.

Erstellen des ASP.NET Core-Projekts

Erstellen Sie eine neue leere ASP.NET Core Web App mit demselben Namen wie das vorherige Projekt (WebApp1), damit die Namespaces in den beiden Projekten übereinstimmen. Das Verwenden desselben Namespace erleichtert das Kopieren von Code zwischen den beiden Projekten. Erstellen Sie dieses Projekt in einem anderen Verzeichnis als das vorherige Projekt, um denselben Namen zu verwenden.

Dialogfeld

Dialogfeld

  • Wahlfrei: Erstellen Sie eine neue ASP.NET Core-App mit der Webanwendungsprojektvorlage. Benennen Sie das Projekt WebApp1, und wählen Sie eine Authentifizierungsoption für einzelne Benutzerkonten aus. Benennen Sie diese App in FullAspNetCore um. Das Erstellen dieses Projekts spart Zeit in der Konvertierung. Das Endergebnis kann im vom Vorlagen generierten Code angezeigt werden, Code kann in das Konvertierungsprojekt kopiert oder mit dem vom Vorlagen generierten Projekt verglichen werden.

Konfigurieren der Website für die Verwendung von MVC

  • Bei der Zielbestimmung von .NET Core wird standardmäßig auf das Microsoft.AspNetCore.App Metapaket verwiesen. Dieses Paket enthält Pakete, die häufig von MVC-Apps verwendet werden. Bei der Zielbestimmung von .NET Framework müssen Paketverweise einzeln in der Projektdatei aufgeführt werden.

Microsoft.AspNetCore.Mvc ist das ASP.NET Core MVC-Framework. Microsoft.AspNetCore.StaticFiles ist der statische Dateihandler. ASP.NET Core-Apps entscheiden sich explizit für Middleware, z. B. für die Bereitstellung statischer Dateien. Weitere Informationen finden Sie unter Statische Dateien.

  • Öffnen Sie die Startup.cs Datei, und ändern Sie den Code so, dass er wie folgt übereinstimmt:
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?}");
        });
    }
}

Die UseStaticFiles Erweiterungsmethode fügt den statischen Dateihandler hinzu. Weitere Informationen finden Sie unter Anwendungsstart und Routing.

Hinzufügen eines Controllers und einer Ansicht

In diesem Abschnitt werden ein minimalistischer Controller und eine minimalistische Ansicht hinzugefügt, die als Platzhalter für den im nächsten Abschnitt migrierten ASP.NET MVC-Controller und die Ansichten dienen.

  • Fügen Sie ein Controllers Verzeichnis hinzu.

  • Fügen Sie eine Controller-Klasse namens HomeController.cs zum Verzeichnis Controllers hinzu.

Dialogfeld

  • Fügen Sie ein Views Verzeichnis hinzu.

  • Fügen Sie ein Views/Home Verzeichnis hinzu.

  • Fügen Sie eine Razor Ansicht namens Index.cshtml dem Views/Home Verzeichnis hinzu.

Dialogfeld 'Neues Element hinzufügen' mit ausgewählter MVC-Ansichtsseite

Die Projektstruktur ist unten dargestellt:

Projektmappen-Explorer mit Dateien und Verzeichnissen von WebApp1

Ersetzen Sie den Inhalt der Views/Home/Index.cshtml Datei durch das folgende Markup:

<h1>Hello world!</h1>

Führen Sie die App aus.

In Microsoft Edge geöffnete Web-App

Weitere Informationen finden Sie unter Controller und Ansichten.

Für die folgende Funktionalität ist eine Migration vom Beispiel ASP.NET MVC-Projekts zum ASP.NET Core-Projekt erforderlich:

  • clientseitige Inhalte (CSS, Schriftarten und Skripts)

  • controllers

  • views

  • models

  • bundling

  • filters

  • Anmelden/Abmelden (Identity Dies geschieht im nächsten Lernprogramm.)

Controller und Ansichten

  • Kopieren Sie jede der Methoden aus dem ASP.NET MVC HomeController in das neue HomeController. In ASP.NET MVC ist der Rückgabetyp der integrierten Controlleraktionsmethode ActionResult; in ASP.NET Core MVC geben die Aktionsmethoden stattdessen IActionResult zurück. ActionResult implementiert IActionResult, sodass der Rückgabetyp der Aktionsmethoden nicht geändert werden muss.

  • Kopieren Sie die About.cshtmlView-Dateien Contact.cshtml und Index.cshtmlRazor aus dem ASP.NET MVC-Projekt in das ASP.NET Core-Projekt.

Jede Methode testen

Die Layoutdatei und -formatvorlagen wurden noch nicht migriert, sodass die gerenderten Ansichten nur den Inhalt in den Ansichtsdateien enthalten. Die von der Layoutdatei generierten Links für die About Und Contact Ansichten sind noch nicht verfügbar.

Rufen Sie die gerenderten Ansichten aus dem Browser auf der ausgeführten ASP.NET Kern-App auf, indem Sie die aktuelle Portnummer durch die im ASP.NET Kernprojekt verwendete Portnummer ersetzen. Beispiel: https://localhost:44375/home/about.

Kontaktseite

Beachten Sie das Fehlen von Formatierungen und Menüelementen. Die Formatierung wird im nächsten Abschnitt behoben.

Statischer Inhalt

In ASP.NET MVC 5 oder früher wurden statische Inhalte aus dem Stammverzeichnis des Webprojekts gehostet und mit serverseitigen Dateien vermischt. In ASP.NET Core werden statische Inhalte im wwwroot Verzeichnis gehostet. Kopieren Sie den statischen Inhalt aus der ASP.NET MVC-App in das wwwroot Verzeichnis im ASP.NET Core-Projekt. In dieser Beispielkonvertierung:

  • Kopieren Sie die favicon.ico Datei aus dem ASP.NET MVC-Projekt in das wwwroot Verzeichnis im ASP.NET Core-Projekt.

Das ASP.NET MVC-Projekt verwendet Bootstrap für die Formatierung und speichert die Bootstrap-Dateien in den Content Und Scripts Verzeichnissen. Die Vorlage, die das ASP.NET MVC-Projekt generiert hat, verweist auf Bootstrap in der Layoutdatei (Views/Shared/_Layout.cshtml). Die Dateien bootstrap.js und bootstrap.css können aus dem ASP.NET MVC-Projekt in das wwwroot-Verzeichnis des neuen Projekts kopiert werden. Stattdessen wird in diesem Dokument unterstützung für Bootstrap (und andere clientseitige Bibliotheken) mithilfe von CDNs im nächsten Abschnitt hinzugefügt.

Migrieren der Layoutdatei

  • Kopieren Sie die _ViewStart.cshtml Datei aus dem Verzeichnis des ASP.NET MVC-Projekts Views in das Verzeichnis des ASP.NET Core-Projekts Views . Die _ViewStart.cshtml Datei wurde in ASP.NET Core MVC nicht geändert.

  • Erstelle das Verzeichnis Views/Shared.

  • Optional: Kopieren Sie _ViewImports.cshtml aus dem Views-Verzeichnis des FullAspNetCore MVC-Projekts in das Views-Verzeichnis des ASP.NET Core-Projekts. Entfernen Sie eine Namespacedeklaration in der _ViewImports.cshtml Datei. Die _ViewImports.cshtml Datei stellt Namespaces für alle Ansichtsdateien bereit und stellt Tag-Hilfsprogramme bereit. Tag Helpers werden in der neuen Layout-Datei verwendet. Die _ViewImports.cshtml Datei ist neu für ASP.NET Core.

  • Kopieren Sie die _Layout.cshtml Datei aus dem Verzeichnis des ASP.NET MVC-Projekts Views/Shared in das Verzeichnis des ASP.NET Core-Projekts Views/Shared .

Öffnen Sie _Layout.cshtml die Datei, und nehmen Sie die folgenden Änderungen vor (der abgeschlossene Code wird unten angezeigt):

  • Ersetzen Sie @Styles.Render("~/Content/css") durch ein <link> Element, um bootstrap.css zu laden (siehe unten).

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

  • Kommentieren Sie die Zeile @Html.Partial("_LoginPartial") aus (umschließen Sie die Zeile mit @*...*@). Weitere Informationen finden Sie unter Migrieren der Authentifizierung und Identity zum ASP.NET Core

  • Ersetzen Sie @Scripts.Render("~/bundles/jquery") durch ein <script>-Element (siehe unten).

  • Ersetzen Sie @Scripts.Render("~/bundles/bootstrap") durch ein <script>-Element (siehe unten).

Das Ersetzungsmarkup für die Bootstrap-CSS-Einbindung:

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

Das Ersatzmarkup für die Einbindung von jQuery und 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>

Die aktualisierte _Layout.cshtml Datei wird unten angezeigt:

<!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>

Zeigen Sie die Website im Browser an. Sie sollte nun mit den erwarteten Formatvorlagen gerendert werden.

  • Wahlfrei: Versuchen Sie, die neue Layoutdatei zu verwenden. Kopieren Sie die Layoutdatei aus dem FullAspNetCore-Projekt . Die neue Layoutdatei verwendet Tag-Hilfsprogramme und hat weitere Verbesserungen.

Konfigurieren von Bündelung und Minimierung

Informationen zum Konfigurieren von Bündelung und Minifizierung finden Sie unter "Bundling and Minification".

Beheben von HTTP 500-Fehlern

Es gibt viele Probleme, die zu einer HTTP 500-Fehlermeldung führen können, die keine Informationen zur Quelle des Problems enthält. Wenn die Views/_ViewImports.cshtml Datei beispielsweise einen Namespace enthält, der im Projekt nicht vorhanden ist, wird ein HTTP 500-Fehler generiert. Standardmäßig wird die UseDeveloperExceptionPage Erweiterung in ASP.NET Core-Apps hinzugefügt und der IApplicationBuilder ausgeführt, wenn die Konfiguration auf Development gesetzt ist. Sehen Sie sich ein Beispiel im folgenden Code an:

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 konvertiert unbehandelte Ausnahmen in HTTP 500-Fehlerantworten. Normalerweise sind Fehlerdetails in diesen Antworten nicht enthalten, um die Offenlegung potenziell vertraulicher Informationen über den Server zu verhindern. Weitere Informationen finden Sie in der Seite „Entwickler-Ausnahmeseite“.

Weitere Ressourcen

In diesem Artikel wird gezeigt, wie Sie mit der Migration eines ASP.NET MVC-Projekts zu ASP.NET Core MVC 2.1 beginnen. Dabei werden viele der Dinge hervorgehoben, die sich von ASP.NET MVC geändert haben. Die Migration von ASP.NET MVC ist ein mehrstufiger Prozess. In diesem Artikel wird Folgendes behandelt:

  • Anfangssetup
  • Grundlegende Controller und Ansichten
  • Statischer Inhalt
  • Clientseitige Abhängigkeiten.

Informationen zum Migrieren von Konfiguration und Identity Code finden Sie unter Migrieren der Konfiguration zu ASP.NET Core und Migrieren der Authentifizierung und Identity zum ASP.NET Core.

Note

Die Versionsnummern in den Beispielen sind möglicherweise nicht aktuell, aktualisieren sie die Projekte entsprechend.

Erstellen des Startprojekts ASP.NET MVC

Um das Upgrade zu veranschaulichen, erstellen wir zunächst eine ASP.NET MVC-App. Erstellen Sie es mit dem Namen WebApp1 , damit der Namespace mit dem im nächsten Schritt erstellten ASP.NET Core-Projekt übereinstimmt.

Visual Studio-Dialogfeld

Dialogfeld

Wahlfrei: Ändern Sie den Namen der Lösung von WebApp1 in Mvc5. Visual Studio zeigt den neuen Lösungsnamen (Mvc5) an, was die Unterscheidung dieses Projekts vom nächsten vereinfacht.

Erstellen des ASP.NET Core-Projekts

Erstellen Sie eine neue leere ASP.NET Core Web App mit demselben Namen wie das vorherige Projekt (WebApp1), damit die Namespaces in den beiden Projekten übereinstimmen. Das Verwenden desselben Namespace erleichtert das Kopieren von Code zwischen den beiden Projekten. Erstellen Sie dieses Projekt in einem anderen Verzeichnis als das vorherige Projekt, um denselben Namen zu verwenden.

Dialogfeld

Dialogfeld

  • Wahlfrei: Erstellen Sie eine neue ASP.NET Core-App mit der Webanwendungsprojektvorlage. Benennen Sie das Projekt WebApp1, und wählen Sie eine Authentifizierungsoption für einzelne Benutzerkonten aus. Benennen Sie diese App in FullAspNetCore um. Das Erstellen dieses Projekts spart Zeit in der Konvertierung. Das Endergebnis kann im vom Vorlagen generierten Code angezeigt werden, Code kann in das Konvertierungsprojekt kopiert oder mit dem vom Vorlagen generierten Projekt verglichen werden.

Konfigurieren der Website für die Verwendung von MVC

  • Bei der Zielbestimmung von .NET Core wird standardmäßig auf das Microsoft.AspNetCore.App Metapaket verwiesen. Dieses Paket enthält Pakete, die häufig von MVC-Apps verwendet werden. Bei der Zielbestimmung von .NET Framework müssen Paketverweise einzeln in der Projektdatei aufgeführt werden.

Microsoft.AspNetCore.Mvc ist das ASP.NET Core MVC-Framework. Microsoft.AspNetCore.StaticFiles ist der statische Dateihandler. ASP.NET Core-Apps entscheiden sich explizit für Middleware, z. B. für die Bereitstellung statischer Dateien. Weitere Informationen finden Sie unter Statische Dateien.

  • Öffnen Sie die Startup.cs Datei, und ändern Sie den Code so, dass er wie folgt übereinstimmt:
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?}");
        });
    }
}

Die UseStaticFiles Erweiterungsmethode fügt den statischen Dateihandler hinzu. Die UseMvc Erweiterungsmethode fügt Routing hinzu. Weitere Informationen finden Sie unter Anwendungsstart und Routing.

Hinzufügen eines Controllers und einer Ansicht

In diesem Abschnitt werden ein minimalistischer Controller und eine minimalistische Ansicht hinzugefügt, die als Platzhalter für den im nächsten Abschnitt migrierten ASP.NET MVC-Controller und die Ansichten dienen.

  • Fügen Sie ein Controllers Verzeichnis hinzu.

  • Fügen Sie eine Controller-Klasse mit dem Namen HomeController.cs dem Controllers Verzeichnis hinzu.

Dialogfeld

  • Fügen Sie ein Views Verzeichnis hinzu.

  • Fügen Sie ein Views/Home Verzeichnis hinzu.

  • Fügen Sie eine Razor Ansicht namens Index.cshtml dem Views/Home Verzeichnis hinzu.

Dialogfeld

Die Projektstruktur ist unten dargestellt:

Projektmappen-Explorer mit Dateien und Verzeichnissen von WebApp1

Ersetzen Sie den Inhalt der Views/Home/Index.cshtml Datei durch das folgende Markup:

<h1>Hello world!</h1>

Führen Sie die App aus.

In Microsoft Edge geöffnete Web-App

Weitere Informationen finden Sie unter Controller und Ansichten.

Für die folgende Funktionalität ist eine Migration vom Beispiel ASP.NET MVC-Projekts zum ASP.NET Core-Projekt erforderlich:

  • clientseitige Inhalte (CSS, Schriftarten und Skripts)

  • controllers

  • views

  • models

  • bundling

  • filters

  • Anmelden/Abmelden (Identity Dies geschieht im nächsten Lernprogramm.)

Controller und Ansichten

  • Kopieren Sie jede der Methoden aus dem ASP.NET MVC HomeController in das neue HomeController. In ASP.NET MVC ist der Rückgabetyp der integrierten Controlleraktionsmethode ActionResult; in ASP.NET Core MVC geben die Aktionsmethoden stattdessen IActionResult zurück. ActionResult implementiert IActionResult, sodass der Rückgabetyp der Aktionsmethoden nicht geändert werden muss.

  • Kopieren Sie die About.cshtmlView-Dateien Contact.cshtml und Index.cshtmlRazor aus dem ASP.NET MVC-Projekt in das ASP.NET Core-Projekt.

Jede Methode testen

Die Layoutdatei und -formatvorlagen wurden noch nicht migriert, sodass die gerenderten Ansichten nur den Inhalt in den Ansichtsdateien enthalten. Die von der Layoutdatei generierten Links für die About Und Contact Ansichten sind noch nicht verfügbar.

  • Rufen Sie die gerenderten Ansichten aus dem Browser auf der ausgeführten ASP.NET Kern-App auf, indem Sie die aktuelle Portnummer durch die im ASP.NET Kernprojekt verwendete Portnummer ersetzen. Beispiel: https://localhost:44375/home/about.

Kontaktseite

Beachten Sie das Fehlen von Formatierungen und Menüelementen. Die Formatierung wird im nächsten Abschnitt behoben.

Statischer Inhalt

In ASP.NET MVC 5 oder früher wurden statische Inhalte aus dem Stammverzeichnis des Webprojekts gehostet und mit serverseitigen Dateien vermischt. In ASP.NET Core werden statische Inhalte im wwwroot Verzeichnis gehostet. Kopieren Sie den statischen Inhalt aus der ASP.NET MVC-App in das wwwroot Verzeichnis im ASP.NET Core-Projekt. In dieser Beispielkonvertierung:

  • Kopieren Sie die favicon.ico Datei aus dem ASP.NET MVC-Projekt in das wwwroot Verzeichnis im ASP.NET Core-Projekt.

Das ASP.NET MVC-Projekt verwendet Bootstrap für die Formatierung und speichert die Bootstrap-Dateien in den Content Und Scripts Verzeichnissen. Die Vorlage, die das ASP.NET MVC-Projekt generiert hat, verweist auf Bootstrap in der Layoutdatei (Views/Shared/_Layout.cshtml). Die Dateien bootstrap.js und bootstrap.css können aus dem ASP.NET MVC-Projekt in das wwwroot-Verzeichnis des neuen Projekts kopiert werden. Stattdessen wird in diesem Dokument unterstützung für Bootstrap (und andere clientseitige Bibliotheken) mithilfe von CDNs im nächsten Abschnitt hinzugefügt.

Migrieren der Layoutdatei

  • Kopieren Sie die _ViewStart.cshtml Datei aus dem Verzeichnis des ASP.NET MVC-Projekts Views in das Verzeichnis des ASP.NET Core-Projekts Views . Die _ViewStart.cshtml Datei wurde in ASP.NET Core MVC nicht geändert.

  • Erstelle das Verzeichnis Views/Shared.

  • Optional: Kopieren Sie _ViewImports.cshtml aus dem Views-Verzeichnis des FullAspNetCore MVC-Projekts in das Views-Verzeichnis des ASP.NET Core-Projekts. Entfernen Sie eine Namespacedeklaration in der _ViewImports.cshtml Datei. Die _ViewImports.cshtml Datei stellt Namespaces für alle Ansichtsdateien bereit und stellt Tag-Hilfsprogramme bereit. Tag Helpers werden in der neuen Layout-Datei verwendet. Die _ViewImports.cshtml Datei ist neu für ASP.NET Core.

  • Kopieren Sie die _Layout.cshtml Datei aus dem Verzeichnis des ASP.NET MVC-Projekts Views/Shared in das Verzeichnis des ASP.NET Core-Projekts Views/Shared .

Öffnen Sie _Layout.cshtml die Datei, und nehmen Sie die folgenden Änderungen vor (der abgeschlossene Code wird unten angezeigt):

  • Ersetzen Sie @Styles.Render("~/Content/css") durch ein <link> Element, um bootstrap.css zu laden (siehe unten).

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

  • Kommentieren Sie die Zeile @Html.Partial("_LoginPartial") aus (umschließen Sie die Zeile mit @*...*@). Weitere Informationen finden Sie unter Migrieren der Authentifizierung und Identity zum ASP.NET Core

  • Ersetzen Sie @Scripts.Render("~/bundles/jquery") durch ein <script>-Element (siehe unten).

  • Ersetzen Sie @Scripts.Render("~/bundles/bootstrap") durch ein <script>-Element (siehe unten).

Das Ersetzungsmarkup für die Bootstrap-CSS-Einbindung:

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

Das Ersatzmarkup für die Einbindung von jQuery und 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>

Die aktualisierte _Layout.cshtml Datei wird unten angezeigt:

<!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>

Zeigen Sie die Website im Browser an. Sie sollte nun mit den erwarteten Formatvorlagen gerendert werden.

  • Wahlfrei: Versuchen Sie, die neue Layoutdatei zu verwenden. Kopieren Sie die Layoutdatei aus dem FullAspNetCore-Projekt . Die neue Layoutdatei verwendet Tag-Hilfsprogramme und hat weitere Verbesserungen.

Konfigurieren von Bündelung und Minimierung

Informationen zum Konfigurieren von Bündelung und Minifizierung finden Sie unter "Bundling and Minification".

Beheben von HTTP 500-Fehlern

Es gibt viele Probleme, die zu einer HTTP 500-Fehlermeldung führen können, die keine Informationen zur Quelle des Problems enthält. Wenn die Views/_ViewImports.cshtml Datei beispielsweise einen Namespace enthält, der im Projekt nicht vorhanden ist, wird ein HTTP 500-Fehler generiert. Standardmäßig wird die UseDeveloperExceptionPage Erweiterung in ASP.NET Core-Apps hinzugefügt und der IApplicationBuilder ausgeführt, wenn die Konfiguration auf Development gesetzt ist. Sehen Sie sich ein Beispiel im folgenden Code an:

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 konvertiert unbehandelte Ausnahmen in HTTP 500-Fehlerantworten. Normalerweise sind Fehlerdetails in diesen Antworten nicht enthalten, um die Offenlegung potenziell vertraulicher Informationen über den Server zu verhindern. Weitere Informationen finden Sie in der Seite „Entwickler-Ausnahmeseite“.

Weitere Ressourcen