Ich habe gerade auf ASP.NET Core 3 Preview 5 aktualisiert. Wenn ich jetzt meine Lösung öffne und versuche, sie zu erstellen, wird der Fehler "Keine Überladung für die Methode" UseRouting "erfordert 1 Argumente" in der Datei "Startup.cs" in Configure () unter ausgelöst den folgenden Code:
app.UseRouting(routes => {
routes.MapControllerRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
routes.MapRazorPages();
});
Ich habe einige Dokumentationen zu den Microsoft-Dokumenten gelesen und versucht, den obigen Code durch Folgendes zu ersetzen:
app.UseEndpoints(endpoints => {
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
Während der Erstellungszeit wird jedoch eine System.InvalidOperationException mit dem folgenden Kontext ausgelöst:
'EndpointRoutingMiddleware stimmt mit den von EndpointMiddleware eingerichteten Endpunkten überein und muss daher vor EndpointMiddleware zur Pipeline für die Anforderungsausführung hinzugefügt werden. Fügen Sie EndpointRoutingMiddleware hinzu, indem Sie 'IApplicationBuilder.UseRouting' im Aufruf von 'Configure (...)' im Anwendungsstartcode aufrufen. '
Ich habe versucht, die folgende Zeile in der ConfigureServices-Methode zu ersetzen:
services.AddMvc()
.AddNewtonsoftJson();
breite:
services.AddControllersWithViews()
.AddNewtonsoftJson();
services.AddRazorPages();
Dies wirft keine Fehler mehr auf, aber meine Seite ist leer, wenn der Ladevorgang abgeschlossen ist. Wer kann mir bei der Lösung dieses Problems helfen?
Für meine Lösung verwende ich folgende Pakete:
<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="3.0.0-preview5-19227-01" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.0.0-preview5-19227-01" />
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="3.0.0-preview5-19227-01" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.0.0-preview5-19227-01" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0-preview5.19227.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0-preview5.19227.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.0.0-preview5.19227.9" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.3" />
Das TargetFramework meiner Lösung ist netcoreapp3.0
So zitieren Sie die Fehlermeldung erneut:
EndpointRoutingMiddleware
stimmt mit den vonEndpointMiddleware
eingerichteten Endpunkten überein und muss daher vorEndpointMiddleware
zur Pipeline für die Anforderungsausführung hinzugefügt werden. Fügen SieEndpointRoutingMiddleware
hinzu, indem Sie 'IApplicationBuilder.UseRouting
' Innerhalb des Aufrufs von 'Configure(...)
' im Anwendungsstartcode aufrufen.
ASP.NET Core 3 verwendet ein verfeinertes Endpunkt-Routing , das im Allgemeinen mehr Kontrolle über das Routing innerhalb der Anwendung bietet. Das Endpoint-Routing erfolgt in zwei separaten Schritten:
Dies sind zwei separate Schritte, damit andere Middlewares zwischen diesen Punkten agieren können. Dies ermöglicht diesen Middlewares, die Informationen aus dem Endpunkt-Routing zu verwenden, z. um die Autorisierung zu handhaben, ohne sie als Teil des tatsächlichen Handlers (z. B. MVC) ausführen zu müssen.
Die beiden Schritte werden von app.UseRouting()
und app.UseEndpoints()
eingerichtet. Ersteres registriert die Middleware, die die Logik zur Bestimmung der Route ausführt. Letzterer führt dann diese Route aus.
Wenn Sie die Fehlermeldung zwischen der etwas verwirrenden Verwendung von EndpointRoutingMiddleware
und EndpointMiddleware
sorgfältig lesen, werden Sie aufgefordert, UseRouting()
innerhalb von Configure
hinzuzufügen Methode. Sie haben also im Grunde vergessen, den ersten Schritt des Endpunkt-Routings aufzurufen.
Ihr Configure
sollte also (zum Beispiel) so aussehen:
app.UseRouting();
app.UseAuthentication();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
Die Routing-Migration auf 3.0 ist auch im Migrationshandbuch für 3. dokumentiert.
Nach einigem Graben fand ich eine Lösung für dieses Problem. Da Dotnet Core 3.0 einige zusätzliche Maßnahmen erfordert, werde ich erklären, was ich getan habe, damit dies funktioniert. Firstable in der ConfigureServices () -Methode (in Startup.cs) entfernen:
services.AddMvc().AddNewtonsoftJson();
Fügen Sie oben in dieser Methode (unter services.Configure <>) die folgenden Zeilen hinzu:
services.AddControllersWithViews()
.AddNewtonsoftJson();
services.AddRazorPages();
Als nächstes fügen Sie in der Configure () -Methode app.UseRouting()
vor app.UseAuthentication()
und app.UseAuthorization();
hinzu und ersetzen am Ende dieser Methode
app.UseRouting(routes => {
routes.MapControllerRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
routes.MapRazorPages();
});
breite:
app.UseEndpoints(endpoints => {
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});