Roadmap › ASP.NET Core MVC (and Razor Pages) › Module: MVC Basics
Lessons in this course (15)
4. Routing: conventional vs attribute
Basic★ Must knowLesson 4 of 15
csharp
// Conventional (Program.cs)
app.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");
app.MapControllerRoute("blog", "blog/{year:int}/{slug}", defaults: new { controller = "Blog", action = "Post" });
// Attribute routing
[Route("shop/products")]
public class ProductsController : Controller
{
[HttpGet("")] public IActionResult Index() => View();
[HttpGet("{id:int:min(1)}")] public IActionResult Details(int id) => View();
[HttpGet("by-category/{name:alpha}")] public IActionResult ByCategory(string name) => View();
}- Route constraints:
int,bool,guid,datetime,min(1),range(1,100),alpha,regex(...),length(3,20). - Endpoint routing (3.0+):
UseRouting()selects the endpoint early so middleware like CORS/auth know which endpoint (and its metadata) will run. - Areas split large apps:
[Area("Admin")]+ route{area:exists}/{controller}/{action}. - Generate URLs, never hard-code:
Url.Action("Details", "Products", new { id }),asp-actiontag helper.