ASP.NET Core 中如何设置默认区域?
How to set the default area in ASP.NET Core?
我在 ASP.NET 核心 3.1 应用程序 (MVC) 中使用区域。
现在我希望所有没有明确区域的请求默认转到“主”区域。这就是我目前设置端点路由的方式:
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?}");
});
我的目标是:
如果请求 URL 包含现有区域名称,请使用路由 [1]。如果没有区域名称,则使用路由[2](默认为“Main”区域)。
我的问题:
- 对“/main/admin”的请求工作正常。
- 对“/admin”的请求导致 404。
如何设置默认区域?
好的,解决了。最后,这对我有用:
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?}");
});
尝试使用以下路由配置:
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?}"
);
});
有两种方法:
- 如果您不指定区域名称,它将查找区域外的
Controller
和 Action
。除了,
重要区域 应该在 Areas
之外,以使其成为您想要的正常(默认区域)。
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}/
app.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?}");
});
参考下面的帖子可以更好地理解
我在 ASP.NET 核心 3.1 应用程序 (MVC) 中使用区域。
现在我希望所有没有明确区域的请求默认转到“主”区域。这就是我目前设置端点路由的方式:
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?}");
});
我的目标是:
如果请求 URL 包含现有区域名称,请使用路由 [1]。如果没有区域名称,则使用路由[2](默认为“Main”区域)。
我的问题:
- 对“/main/admin”的请求工作正常。
- 对“/admin”的请求导致 404。
如何设置默认区域?
好的,解决了。最后,这对我有用:
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?}");
});
尝试使用以下路由配置:
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?}"
);
});
有两种方法:
- 如果您不指定区域名称,它将查找区域外的
Controller
和Action
。除了, 重要区域 应该在Areas
之外,以使其成为您想要的正常(默认区域)。
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}/
app.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?}");
});
参考下面的帖子可以更好地理解