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?
: Theid
parameter 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:
UseRouting
adds route matching to the middleware pipeline.UseEndpoints
defines the endpoints for routing.- The default route maps to the
HomeController
and itsIndex
action method, with an optionalid
parameter.
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