In ASP.NET Core MVC applications, routing is a key feature that maps incoming HTTP requests to the corresponding controller actions. Here's an overview of how routing works:
1. Defining Routes
Routes are defined in the Startup.cs file, specifically in the Configure method using the app.UseEndpoints method. The routes are typically set up within the UseEndpoints middleware, which is part of the request processing pipeline.
2. Route Templates
Route templates are patterns that are matched against the URL paths of incoming requests. They usually contain placeholders for parameters. Here's an example of a route template:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
In this example:
controller=Home: The default controller isHome.action=Index: The default action method isIndex.id?: Theidparameter is optional (denoted by?).
3. Attribute Routing
In addition to conventional routing (defined in Startup.cs), ASP.NET Core MVC supports attribute routing, where routes are defined directly on the controller actions using attributes.
[Route("products")]
public class ProductsController : Controller
{
[Route("")]
[Route("index")]
public IActionResult Index()
{
return View();
}
[Route("{id}")]
public IActionResult Details(int id)
{
// code to retrieve product details
return View();
}
}
4. Routing Middleware
The routing middleware processes the incoming requests and matches them against the defined route templates. If a match is found, the corresponding controller and action method are invoked.
5. Route Constraints
Constraints can be added to route parameters to restrict the matching criteria. For example, you can ensure a parameter is an integer:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id:int?}");
});
6. Customizing Routing
ASP.NET Core MVC allows extensive customization of routing through route constraints, custom route handlers, and middleware.
Example in Startup.cs
Here's a more comprehensive example demonstrating the setup of conventional routing in an ASP.NET Core MVC application:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
}
In this setup:
UseRoutingadds route matching to the middleware pipeline.UseEndpointsdefines the endpoints for routing.- The default route maps to the
HomeControllerand itsIndexaction method, with an optionalidparameter.
Understanding these fundamentals of routing in ASP.NET Core MVC will help you effectively handle and direct HTTP requests in your applications.

No comments:
Write comments