La configuración de enrutamiento en ASP.NET Core 3.0 es diferente de 2.0
Uno, registro de servicio MVC
ASP.NET Core 3.0 agrega una nueva opción para registrar soluciones MVC internas Startup.ConfigureServices
.
Hay tres nuevos métodos de extensión de nivel superior IServiceCollection
disponibles en el programa MVC . Las plantillas utilizan estos nuevos métodos en su lugar UseMvc
. Sin embargo, AddMvc
sigue igual que en la versión anterior.
El siguiente ejemplo agregará soporte para controladores y funciones relacionadas con API, pero no para vistas o páginas. La plantilla de API usa este código:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
}
El siguiente ejemplo agregará soporte para controladores, funciones relacionadas con API y vistas, pero no para páginas. La plantilla de aplicación web (MVC) usa este código:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
}
El siguiente ejemplo agrega compatibilidad con páginas de Razor y compatibilidad mínima con el controlador. La plantilla de la aplicación web utiliza este código:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
}
También nuevos métodos que se pueden combinar. El siguiente ejemplo es equivalente a llamar a AddMvc
ASP.NET Core 2.2:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddRazorPages();
}
Dos, Startup.Configure
colocación
Generalmente no recomendado:
- Agregar
UseRouting
. - Si se llama a la aplicación
UseStaticFiles
, se colocaráUseStaticFiles
antesUseRouting
. - Si la aplicación utiliza las funciones de autenticación / autorización, como
AuthorizePage
o[Authorize]
, willUseAuthentication
yUseAuthorization
afterUseRouting
. - Si la aplicación utiliza
CORS
funciones como, por ejemplo[EnableCors]
, se colocará elUseCors
siguiente paso. - Reemplazar
UseMvc
oUseSignalR
conUseEndpoints
.
La siguiente es una Startup.Configure
aplicación típica de ASP.NET Core 2.2:
public void Configure(IApplicationBuilder app)
{
...
app.UseStaticFiles();
app.UseAuthentication();
app.UseSignalR(hubs =>
{
hubs.MapHub<ChatHub>("/chat");
});
app.UseMvc(routes =>
{
routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
});
}
Esto sucede dentro del mapeo del controlador actual UseEndpoints
.
Agregue MapControllers
si la aplicación usa enrutamiento de atributos. Como la ruta incluye muchos marcos ASP.NET Core 3.0
o compatibilidad con versiones superiores, agregue el controlador de ruta de atributo para participar.
Será lo siguiente:
MapRoute
el uso de MapControllerRoute
MapAreaRoute
uso MapAreaControllerRoute
debido a la ruta ahora incluye más que solo soporte para MVC, y ha cambiado los términos de estos métodos para que se establezca claramente que lo hicieron. MapControllerRoute / MapAreaControllerRoute / MapDefaultControllerRoute
Se aplican en el orden en que se agregan, como en el enrutamiento tradicional . Pon la primera ruta más específica (como la ruta de un área determinada).
En el siguiente ejemplo: Se
MapControllers
agregó compatibilidad con el controlador para el enrutamiento de atributos.
MapAreaControllerRoute
Agregue el enrutamiento tradicional del controlador al área.
MapControllerRoute
Agregue el enrutamiento regular del controlador.
Ahora el mapeo Razor
ocurre dentro de la página UseEndpoints
.
Agregar MapRazorPages
si la aplicación usa Razor
la página. Desde el punto final de la ruta, incluida la adición de soporte para muchos marcos, la Razor
página ahora participa.
Startup.Configure
Código en Asp.net Core 3.0 después de la actualización :
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapAreaControllerRoute(
name: "areas", "areas",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
}
Si desea particionar la ruta, el controlador Controller
primero debe agregar Area
y Route
etiquetar, o no puede, como en el controlador Asp.net Core 2.0 y el enrutamiento automático Action
. El código de muestra es el siguiente:
namespace WebApplication1.Areas.CMS.Controllers
{
[Area("CMS")]
[Route("CMS/[controller]/[action]")]
public class NewsController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult List()
{
return View();
}
}
}
Estas dos oraciones deben agregarse [Area("CMS")]、[Route("CMS/[controller]/[action]")]