如何在 ASP.NET Core 中设置默认区域?
Posted
技术标签:
【中文标题】如何在 ASP.NET Core 中设置默认区域?【英文标题】:How to set the default area in ASP.NET Core? 【发布时间】:2020-06-14 12:07:09 【问题描述】:我在我的 ASP.NET Core 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/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?");
);
【问题讨论】:
【参考方案1】:有两种方式:
-
如果不指定区域名称,它将在区域之外找到
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 Core 2 default route having areas
【讨论】:
感谢您的帮助,Phong。您的较低 sn-p 无法编译。上部通向 404 仍然。我想,我需要从最具体的路线开始,然后再从更一般的路线开始。在你的 sn-ps 中,我觉得你在做相反的事情,不是吗? 如何指定路由获取Controller
和Action
外Area
。这就是我的观点。 ibb.co/hcF1XMn
嗯。好吧,我在区域外没有控制器。所以我所拥有的一切都包裹在区域中。但是,有一个区域比我所有其他区域更重要。如果 url 中没有区域,我的目标是路由到这个重要区域。
很明显,重要区域应该在外面才能正常(默认区域)。
哈哈,是的。但我现在不想改变一切。谢谢庞。仍在寻找一种方法让它按我的方式工作。【参考方案2】:
尝试使用以下路由配置:
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?"
);
);
【讨论】:
感谢@Xing Zou,但这并没有成功。对“/admin”的请求仍然会导致 404。以上是关于如何在 ASP.NET Core 中设置默认区域?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET Core 2.0 中设置多个身份验证方案?
如何在 asp.net core 3 中设置 json 序列化程序设置?
如何在 asp.net core 中设置 jwt 令牌的生命周期