Nuestros mejores programadores agotaron sus depósitos de café, en su búsqueda noche y día por la solución, hasta que Alfredo encontró el hallazgo en Gitea por lo tanto hoy la comparte aquí.
Solución:
Para citar el mensaje de error de nuevo:
EndpointRoutingMiddleware
coincide con la configuración de puntos finales porEndpointMiddleware
y, por lo tanto, debe agregarse a la canalización de ejecución de la solicitud antesEndpointMiddleware
. Por favor añadirEndpointRoutingMiddleware
llamando ‘IApplicationBuilder.UseRouting
‘ dentro de la llamada a ‘Configure(...)
‘ en el código de inicio de la aplicación.
ASP.NET Core 3 utiliza un refinado enrutamiento de punto final lo que generalmente dará más control sobre el enrutamiento dentro de la aplicación. El enrutamiento de punto final funciona en dos pasos separados:
- En un primer paso, la ruta solicitada se compara con las rutas configuradas para averiguar a qué ruta se está accediendo.
- En un paso final, se evalúa la ruta determinada y se llama al middleware respectivo, por ejemplo, MVC.
Estos son dos pasos separados para permitir que otros middlewares actúen entre esos puntos. Eso permite que esos middlewares utilicen la información del enrutamiento de punto final, por ejemplo, para manejar la autorización, sin tener que ejecutar como parte del proceso real. manipulador (por ejemplo, MVC).
Los dos pasos están establecidos por app.UseRouting()
y app.UseEndpoints()
. El primero registrará el middleware que ejecuta la lógica para determinar la ruta. Este último ejecutará entonces esa ruta.
Si lee atentamente el mensaje de error, entre el uso algo confuso de EndpointRoutingMiddleware
y EndpointMiddleware
, te dirá que agregues UseRouting()
dentro de la Configure
método. Básicamente, olvidó invocar el primer paso del enrutamiento de punto final.
Entonces tus Configure
debería (por ejemplo) verse así:
app.UseRouting();
app.UseAuthentication();
app.UseEndpoints(endpoints =>
endpoints.MapControllerRoute(
name: "default",
pattern: "controller=Home/action=Index/id?");
endpoints.MapRazorPages();
);
La migración de enrutamiento a 3.0 también se documenta en la guía de migración para 3.0.
Después de investigar un poco, encontré una solución para este problema. Dado que dotnet core 3.0 requiere alguna acción adicional, explicaré lo que hice para que esto funcione. En primer lugar, en el método ConfigureServices() (en Startup.cs), elimine:
services.AddMvc().AddNewtonsoftJson();
En la parte superior de este método (bajo services.Configure<>), agregue las siguientes líneas:
services.AddControllersWithViews()
.AddNewtonsoftJson();
services.AddRazorPages();
A continuación, en el método Configure(), agregue app.UseRouting()
antes de app.UseAuthentication()
y app.UseAuthorization();
y en la parte inferior de este método reemplazar
app.UseRouting(routes =>
routes.MapControllerRoute(
name: "default",
template: "controller=Home/action=Index/id?");
routes.MapRazorPages();
);
con:
app.UseEndpoints(endpoints =>
endpoints.MapControllerRoute(
name: "default",
pattern: "controller=Home/action=Index/id?");
endpoints.MapRazorPages();
);
Si te animas, eres capaz de dejar una crónica acerca de qué te ha parecido este tutorial.