Reputation: 1437
I am using areas in my ASP.NET Core 3.1 application (MVC).
Now I want all requests without an explicit area to go to the "Main" area by default. This is how I currently set up my endpoint routing:
app.UseEndpoints(endpoints =>
{
// 1
endpoints.MapControllerRoute(
name: "area",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
// 2
endpoints.MapAreaControllerRoute(
name: "default",
areaName: "Main",
pattern: "{area=Main}/{controller=Home}/{action=Index}/{id?}");
});
My goal is:
If the request URL contains an existing area name, use routing [1]. If there is no area name, use routing [2] (which defaults to the "Main" area).
My problem:
How do I set up the default area?
OK, solved. In the end, this here has been working for me:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "area:exists}/{controller=Home}/{action=Index}/{id?}");
endpoints.MapAreaControllerRoute(
name: "default",
areaName: "Main",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
Upvotes: 10
Views: 8026
Reputation: 14198
There are 2 ways:
Controller
and Action
outside the Areas. Besides,
The Important Area should be outside Areas
to make it as normal (Default Area) as you wish. app.UseEndpoints(endpoints =>
{
// 1
endpoints.MapControllerRoute(
name: "area",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
// 2
endpoints.MapAreaControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
{area=Main}/
in your patternapp.UseMvc(routes =>
{
routes.MapControllerRoute(
name: "area",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
routes.MapAreaControllerRoute(
name: "default",
areaName: "Main",
template: "{controller=Home}/{action=Index}/{id?}");
});
Refer the following thread to have a better understanding
ASP.NET Core 2 default route having areas
Upvotes: 9
Reputation: 20106
Try to use below routing configuration:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
endpoints.MapAreaControllerRoute(
name: "Main",
areaName: "Main",
pattern: "{controller=Home}/{action=Index}/{id?}"
);
});
Upvotes: 1