Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
- Visual Studio 2019 16.4 oder höher mit der Arbeitsauslastung für ASP.NET und Webentwicklung
- .NET Core 3.1 SDK
Erstellen des Startprojekts ASP.NET MVC
Erstellen Sie ein Beispiel ASP.NET MVC-Projekt in Visual Studio zum Migrieren:
- Klicken Sie im Menü Datei auf Neu>Projekt.
- Wählen Sie ASP.NET Webanwendung (.NET Framework) und dann "Weiter" aus.
- Benennen Sie das Projekt WebApp1 , damit der Namespace dem im nächsten Schritt erstellten ASP.NET Core-Projekt entspricht. Wählen Sie "Erstellen" aus.
- 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:
- Starten Sie eine zweite Instanz von Visual Studio.
- Klicken Sie im Menü Datei auf Neu>Projekt.
- Wählen Sie ASP.NET Core-Webanwendung und dann "Weiter" aus.
- Benennen Sie im Dialogfeld " Neues Projekt konfigurieren " das Projekt "WebApp1".
- 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.
- 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.asaxErsetzt. - 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:
- Die AddControllersWithViews Erweiterungsmethode registriert die MVC-Dienstunterstützung für Controller, API-bezogene Features und Ansichten. Weitere Informationen zu MVC-Dienstregistrierungsoptionen finden Sie unter MVC-Dienstregistrierung
- Die UseStaticFiles Erweiterungsmethode fügt den statischen Dateihandler
Microsoft.AspNetCore.StaticFileshinzu. DieUseStaticFilesErweiterungsmethode muss vorUseRoutingaufgerufen werden. Weitere Informationen finden Sie unter Statische Dateien in ASP.NET Core. - Die UseRouting Erweiterungsmethode fügt Routing hinzu. Weitere Informationen finden Sie unter Routing in ASP.NET Core.
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.
- Kopieren Sie die Methoden aus dem ASP.NET MVC
HomeController, um die neuen ASP.NET Core-MethodenHomeControllerzu 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 stattdessenIActionResultzurück.ActionResultimplementiertIActionResult. - Klicken Sie im ASP.NET Core-Projekt mit der rechten Maustaste auf das Verzeichnis "Ansichten/HomeVerzeichnis", und wählen Sie "Vorhandenes Element> aus.
- Navigieren Sie im Dialogfeld "Vorhandenes Element hinzufügen" zum AnsichtenVerzeichnis des ASP.NET MVC Home.
- Wählen Sie die Ansichtsdateien
About.cshtml,Contact.cshtmlundIndex.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.
- Führen Sie die ASP.NET Core-App aus.
- 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 :
- Klicken Sie im ASP.NET Core-Projekt mit der rechten Maustaste auf das
wwwrootVerzeichnis, und wählen Sie "Vorhandenes Element> aus. - Navigieren Sie im Dialogfeld " Vorhandenes Element hinzufügen " zum ASP.NET MVC WebApp1-Projekts .
- Wählen Sie die
favicon.icoDatei 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:
- Klicken Sie im ASP.NET Core-Projekt mit der rechten Maustaste auf das
ViewsVerzeichnis, und wählen Sie "Vorhandenes Element> aus. - Navigieren Sie im Dialogfeld "Vorhandenes Element hinzufügen" zum Verzeichnis des ASP.NET MVC WebApp1-Projekts
Views. - Wählen Sie die
_ViewStart.cshtmlDatei und dann "Hinzufügen" aus.
Kopieren Sie die freigegebenen Layout-Dateien des ASP.NET MVC-Projekts in das ASP.NET Core-Projekt.
- Klicken Sie im ASP.NET Core-Projekt mit der rechten Maustaste auf das
Views/SharedVerzeichnis, und wählen Sie "Vorhandenes Element> aus. - Navigieren Sie im Dialogfeld "Vorhandenes Element hinzufügen" zum Verzeichnis des ASP.NET MVC WebApp1-Projekts
Views/Shared. - Wählen Sie die
_Layout.cshtmlDatei 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:
- Ersetzen Sie
@Styles.Render("~/Content/css")durch ein<link>Element, umbootstrap.csszu laden (siehe unten). - 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:
- 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 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>© @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.
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.
- 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.csDatei, 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
ControllersVerzeichnis hinzu.Fügen Sie eine Controller-Klasse namens
HomeController.cszum VerzeichnisControllershinzu.
Fügen Sie ein
ViewsVerzeichnis hinzu.Fügen Sie ein
Views/HomeVerzeichnis hinzu.Fügen Sie eine Razor Ansicht namens
Index.cshtmldemViews/HomeVerzeichnis hinzu.
Die Projektstruktur ist unten dargestellt:
Ersetzen Sie den Inhalt der Views/Home/Index.cshtml Datei durch das folgende Markup:
<h1>Hello world!</h1>
Führen Sie die App aus.
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
HomeControllerin das neueHomeController. In ASP.NET MVC ist der Rückgabetyp der integrierten Controlleraktionsmethode ActionResult; in ASP.NET Core MVC geben die Aktionsmethoden stattdessenIActionResultzurück.ActionResultimplementiertIActionResult, sodass der Rückgabetyp der Aktionsmethoden nicht geändert werden muss.Kopieren Sie die
About.cshtmlView-DateienContact.cshtmlundIndex.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.
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.icoDatei aus dem ASP.NET MVC-Projekt in daswwwrootVerzeichnis 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.cshtmlDatei aus dem Verzeichnis des ASP.NET MVC-ProjektsViewsin das Verzeichnis des ASP.NET Core-ProjektsViews. Die_ViewStart.cshtmlDatei wurde in ASP.NET Core MVC nicht geändert.Erstelle das Verzeichnis
Views/Shared.Optional: Kopieren Sie
_ViewImports.cshtmlaus demViews-Verzeichnis des FullAspNetCore MVC-Projekts in dasViews-Verzeichnis des ASP.NET Core-Projekts. Entfernen Sie eine Namespacedeklaration in der_ViewImports.cshtmlDatei. Die_ViewImports.cshtmlDatei stellt Namespaces für alle Ansichtsdateien bereit und stellt Tag-Hilfsprogramme bereit. Tag Helpers werden in der neuen Layout-Datei verwendet. Die_ViewImports.cshtmlDatei ist neu für ASP.NET Core.Kopieren Sie die
_Layout.cshtmlDatei aus dem Verzeichnis des ASP.NET MVC-ProjektsViews/Sharedin das Verzeichnis des ASP.NET Core-ProjektsViews/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, umbootstrap.csszu 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 CoreErsetzen 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>© @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.
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.
- 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.csDatei, 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
ControllersVerzeichnis hinzu.Fügen Sie eine Controller-Klasse mit dem Namen
HomeController.csdemControllersVerzeichnis hinzu.
Fügen Sie ein
ViewsVerzeichnis hinzu.Fügen Sie ein
Views/HomeVerzeichnis hinzu.Fügen Sie eine Razor Ansicht namens
Index.cshtmldemViews/HomeVerzeichnis hinzu.
Die Projektstruktur ist unten dargestellt:
Ersetzen Sie den Inhalt der Views/Home/Index.cshtml Datei durch das folgende Markup:
<h1>Hello world!</h1>
Führen Sie die App aus.
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
HomeControllerin das neueHomeController. In ASP.NET MVC ist der Rückgabetyp der integrierten Controlleraktionsmethode ActionResult; in ASP.NET Core MVC geben die Aktionsmethoden stattdessenIActionResultzurück.ActionResultimplementiertIActionResult, sodass der Rückgabetyp der Aktionsmethoden nicht geändert werden muss.Kopieren Sie die
About.cshtmlView-DateienContact.cshtmlundIndex.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.
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.icoDatei aus dem ASP.NET MVC-Projekt in daswwwrootVerzeichnis 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.cshtmlDatei aus dem Verzeichnis des ASP.NET MVC-ProjektsViewsin das Verzeichnis des ASP.NET Core-ProjektsViews. Die_ViewStart.cshtmlDatei wurde in ASP.NET Core MVC nicht geändert.Erstelle das Verzeichnis
Views/Shared.Optional: Kopieren Sie
_ViewImports.cshtmlaus demViews-Verzeichnis des FullAspNetCore MVC-Projekts in dasViews-Verzeichnis des ASP.NET Core-Projekts. Entfernen Sie eine Namespacedeklaration in der_ViewImports.cshtmlDatei. Die_ViewImports.cshtmlDatei stellt Namespaces für alle Ansichtsdateien bereit und stellt Tag-Hilfsprogramme bereit. Tag Helpers werden in der neuen Layout-Datei verwendet. Die_ViewImports.cshtmlDatei ist neu für ASP.NET Core.Kopieren Sie die
_Layout.cshtmlDatei aus dem Verzeichnis des ASP.NET MVC-ProjektsViews/Sharedin das Verzeichnis des ASP.NET Core-ProjektsViews/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, umbootstrap.csszu 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 CoreErsetzen 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>© @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
ASP.NET Core