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
Pour citer à nouveau le message d'erreur:
EndpointRoutingMiddleware
correspond à la configuration des noeuds finaux parEndpointMiddleware
et doit donc être ajoutée au pipeline d'exécution de la demande avantEndpointMiddleware
. Veuillez ajouterEndpointRoutingMiddleware
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:
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. .
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();
});