webentwicklung-frage-antwort-db.com.de

Keine Überladung für die Methode 'UseRouting' erfordert 1 Argumente

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

10
Mitch

So zitieren Sie die Fehlermeldung erneut:

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' 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:

  • In einem ersten Schritt wird die angeforderte Route mit den konfigurierten Routen abgeglichen, um herauszufinden, auf welche Route zugegriffen wird.
  • In einem letzten Schritt wird die bestimmte Route ausgewertet und die jeweilige Middleware, z. MVC heißt.

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.

21
poke

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();
    });
1
Mitch