web-dev-qa-db-fra.com

Aucune surcharge pour la méthode 'UseRouting' prend 1 arguments

Je viens de mettre à jour vers ASP.NET Core 3 Preview 5, maintenant, lorsque j'ouvre ma solution et que j'essaye de la construire, l'erreur `` Pas de surcharge pour la méthode 'UseRouting' prend 1 arguments '' dans le fichier Startup.cs dans Configure () à le code suivant:

    app.UseRouting(routes => {
        routes.MapControllerRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
        routes.MapRazorPages();
    });

J'ai lu de la documentation sur les documents Microsoft et j'ai essayé de remplacer le code ci-dessus par:

    app.UseEndpoints(endpoints => {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
        endpoints.MapRazorPages();
    });

Cependant, lors de la génération qui déclenche une System.InvalidOperationException avec le contexte suivant:

"EndpointRoutingMiddleware correspond à la configuration des points de terminaison par EndpointMiddleware et doit donc être ajouté au pipeline d'exécution des demandes avant EndpointMiddleware. Veuillez ajouter EndpointRoutingMiddleware en appelant "IApplicationBuilder.UseRouting" dans l'appel à "Configurer (...)" dans le code de démarrage de l'application.

J'ai essayé de remplacer la ligne suivante dans la méthode ConfigureServices:

    services.AddMvc()
        .AddNewtonsoftJson();

largeur:

    services.AddControllersWithViews()
        .AddNewtonsoftJson();
    services.AddRazorPages();

Cela ne génère plus d'erreurs mais ma page est vide lorsqu'elle a fini de se charger. Qui peut m'aider à résoudre ce problème?

Pour ma solution, j'utilise les packages suivants:

 <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" />

Le TargetFramework de ma solution est netcoreapp3.0

10
Mitch

Pour citer à nouveau le message d'erreur:

EndpointRoutingMiddleware correspond à la configuration des noeuds finaux par EndpointMiddleware et doit donc être ajoutée au pipeline d'exécution de la demande avant EndpointMiddleware. Veuillez ajouter EndpointRoutingMiddleware en appelant 'IApplicationBuilder.UseRouting' À l'intérieur de l'appel à 'Configure(...)' dans le code de démarrage de l'application.

ASP.NET Core 3 utilise un routage de point de terminaison raffiné qui donnera généralement plus de contrôle sur le routage au sein de l'application. Le routage des points de terminaison fonctionne en deux étapes distinctes:

  • Dans une première étape, la route demandée est mise en correspondance avec les routes configurées pour déterminer quelle route est accessible.
  • Dans une dernière étape, l'itinéraire déterminé est en cours d'évaluation et le middleware respectif, par ex. MVC, est appelé.

Ce sont deux étapes distinctes pour permettre à d'autres middlewares d'agir entre ces points. Cela permet à ces middlewares d'utiliser les informations du routage des points d'extrémité, par exemple pour gérer l'autorisation, sans avoir à exécuter dans le cadre du gestionnaire réel (par exemple MVC).

Les deux étapes sont définies par app.UseRouting() et app.UseEndpoints(). Le premier enregistrera le middleware qui exécute la logique pour déterminer l'itinéraire. Ce dernier exécutera alors cette route.

Si vous lisez attentivement le message d'erreur, entre l'utilisation quelque peu déroutante de EndpointRoutingMiddleware et EndpointMiddleware, il vous dira d'ajouter UseRouting() à l'intérieur de Configure méthode. Donc, fondamentalement, vous avez oublié d'invoquer la première étape du routage des points de terminaison.

Ainsi, votre Configure devrait (par exemple) ressembler à ceci:

app.UseRouting();

app.UseAuthentication();

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
    endpoints.MapRazorPages();
});

La migration de routage vers 3.0 est également documentée dans le guide de migration pour 3. .

21
poke

Après avoir creusé, j'ai trouvé une solution à ce problème. Étant donné que dotnet core 3.0 nécessite une action supplémentaire, je vais expliquer ce que j'ai fait pour que cela fonctionne. Firstable dans la méthode ConfigureServices () (dans Startup.cs) supprimez:

services.AddMvc().AddNewtonsoftJson();

En haut de cette méthode (sous services.Configure <>), ajoutez les lignes suivantes:

    services.AddControllersWithViews()
        .AddNewtonsoftJson();
    services.AddRazorPages();

Ensuite, dans la méthode Configure (), ajoutez app.UseRouting() avant app.UseAuthentication() et app.UseAuthorization(); et au bas de cette méthode remplacez

    app.UseRouting(routes => {
        routes.MapControllerRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
        routes.MapRazorPages();
    });

largeur:

    app.UseEndpoints(endpoints => {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
        endpoints.MapRazorPages();
    });
1
Mitch