La configuration de routage dans ASP.NET Core 3.0 est différente de 2.0
Un, enregistrement du service MVC
ASP.NET Core 3.0 ajoute une nouvelle option pour enregistrer les solutions MVC internes Startup.ConfigureServices
.
Trois nouvelles méthodes d'extension de niveau supérieur sont IServiceCollection
disponibles sur le programme MVC . Les modèles utilisent à la place ces nouvelles méthodes UseMvc
. Cependant, il AddMvc
continue comme dans la version précédente.
L'exemple suivant ajoutera la prise en charge des contrôleurs et des fonctions liées à l'API, mais pas pour les vues ou les pages. Le modèle d'API utilise ce code:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
}
L'exemple suivant ajoutera la prise en charge des contrôleurs, des fonctions liées à l'API et des vues, mais pas pour les pages. Le modèle d'application Web (MVC) utilise ce code:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
}
L'exemple suivant ajoute la prise en charge des pages Razor et une prise en charge minimale du contrôleur. Le modèle d'application Web utilise ce code:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
}
Aussi de nouvelles méthodes qui peuvent être combinées. L'exemple suivant équivaut à appeler AddMvc
ASP.NET Core 2.2:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddRazorPages();
}
Deux, Startup.Configure
placement
Généralement déconseillé:
- Ajouter
UseRouting
. - Si l'application est appelée
UseStaticFiles
, elle sera placéeUseStaticFiles
avantUseRouting
. - Si l'application utilise les fonctionnalités d'authentification / d'autorisation, telles que
AuthorizePage
ou[Authorize]
, seraUseAuthentication
etUseAuthorization
aprèsUseRouting
. - Si l'application utilise des
CORS
fonctions, telles que[EnableCors]
, l'UseCors
étape suivante sera placée . - Remplacez
UseMvc
ouUseSignalR
parUseEndpoints
.
Voici une Startup.Configure
application ASP.NET Core 2.2 typique:
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?}");
});
}
Cela se produit dans le mappage actuel du contrôleur UseEndpoints
.
Ajoutez MapControllers
si l'application utilise le routage d'attributs. Comme la route comprend de nombreux frameworks ASP.NET Core 3.0
ou une prise en charge de version supérieure, ajoutez l'attribut route controller est de participer.
Sera la suivante:
MapRoute
l'utilisation de l' MapControllerRoute
MapAreaRoute
utilisation en MapAreaControllerRoute
raison de l'itinéraire comprend désormais plus que le simple support de MVC, et a changé les termes de ces méthodes, il est clairement indiqué qu'ils l'ont fait. MapControllerRoute / MapAreaControllerRoute / MapDefaultControllerRoute
Ils sont appliqués dans l'ordre dans lequel ils sont ajoutés comme dans le routage traditionnel . Mettez le premier itinéraire plus spécifique (comme l'itinéraire d'une certaine zone).
Dans l'exemple suivant:
MapControllers
Ajout de la prise en charge du contrôleur pour le routage d'attributs.
MapAreaControllerRoute
Ajoutez le routage traditionnel du contrôleur à la zone.
MapControllerRoute
Ajoutez le routage régulier du contrôleur.
Le mappage Razor
se produit maintenant dans la page UseEndpoints
.
Ajout MapRazorPages
Si l'application utilise Razor
la page. Depuis le point final de l'itinéraire, y compris l'ajout de la prise en charge de nombreux cadres de Razor
page participent maintenant.
Startup.Configure
Code dans Asp.net Core 3.0 après la mise à jour :
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 vous souhaitez partitionner la route, le contrôleur doit d' Controller
abord ajouter Area
et Route
étiqueter, ou ne peut pas, comme dans le contrôleur Asp.net Core 2.0 et le routage automatique Action
. L'exemple de code est le suivant:
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();
}
}
}
Ces deux phrases doivent être ajoutées [Area("CMS")]、[Route("CMS/[controller]/[action]")]