我找不到有关中间件端点模式字段格式的任何文档/详细信息。或根本没有端点。仅是用于路由的常见用例场景的示例。
我想做的是接受如下请求:
example.com/anything1/anything2
并将其转发给:
example.com/Home/Display?var1=anything1&var2=anything2
浏览器应显示原始请求,而不要更改。
我的最终目标是通过home
从数据库获取数据来返回view
控制器的布局。
我一直在向它扔随机数据,以查看是什么破坏了它,但未能成功理解什么有用。
pattern: "{custompath}/{custompage}");
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "notDefault",
pattern: "{area:exists}/{controller=Content}/{action=Index}/{id?}");
});
这是当前可用于我的区域和控制器的默认设置,但我也不完全理解为什么。
更新 从asp.net core 2.2到3的迁移文章说:“端点路由支持与IRouter相同的路由模式语法和路由模式创作功能”。 https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio#mvc-service-registration
没有指向预期语法的链接,但是我发现一些旧文章中有相关信息。尽管有帮助,但它们仍然不完整和/或不准确。应用逻辑时,我发现了错误。这是最有用的信息。 https://aspnetcore.readthedocs.io/en/stable/fundamentals/routing.html
某些路线可行,但在我添加其他路线时会中断。例如,仅当有人键入“ Account”作为第一个参数时,才应接受基于以上文章的此路由,而在没有路径或参数的情况下进行请求时,它将操纵该请求以将“ Account”包括在下一条路由的默认控制器中。但是然后按预期返回最后一条路线。
时endpoints.MapControllerRoute(
name: "account",
pattern: "Account/{controller=Dashboard}/{action=Overview}",
defaults: new { area = "Account" });
endpoints.MapControllerRoute(
name: "manage",
pattern: "Manage/{controller=Content}/{action=Index}",
defaults: new { area = "Manage" });
endpoints.MapControllerRoute(
name: "default",
pattern: "",
defaults: new { controller = "Content", action = "Display", path = "Public", page = "Index" });
它操纵对https://localhost:port/Account/Content/的请求 并包含https://localhost:port/Content/Display/
中的内容我希望当我不输入“帐户”或“管理”时,它会掉入空白路径并停在那里。但似乎到达目的地后,它还会执行其他操作。我想要的一半完成了,哈哈。
最新更新 目前,我正在使用最少的错误进行此工作。从概念上讲,当我做这些时,我以为模式是我的应用程序中存在的结构(controller> action> param,这比我最初想象的要落后。(模式是用户请求的*)
endpoints.MapControllerRoute(
name: "Public",
pattern: "{page}",
defaults: new { controller = "Content", action = "Display", path = "Public" });
endpoints.MapControllerRoute(
name: "Default",
pattern: "{path=Public}/{page=Index}",
defaults: new { controller = "Content", action = "Display" });
endpoints.MapControllerRoute(
name: "Controllers",
pattern: "{controller}/{action}/{id?}");
注释:
“ areaName:”将名称加引号加到请求中。 “默认值:”操纵请求。我能够注入控制器和动作。
要注意的另一件事是,这些端点会影响使用asp- *的链接的生成路由
答案 0 :(得分:0)
我认为不存在有关模式语法或格式的文档,但是我能够使某些工作正常进行。
使用以下代码,我可以发送如下请求:
example.com/anything1/anything2
,并将其发送到控制器“ Home”,并以“ any1”和“ anything2”作为参数发送到“ Display”操作。而且用户仍然可以看到原始请求。
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{path}/{page}",
defaults: new {controller="Home", action="Display", path="", page="" });
});
此外,如果没有要求,则在路径和页面的引号中添加文本将允许发送默认值。我最初编写中间件来处理整个响应,但是不得不生成运行速度慢得多的剃须刀页面。这使我可以使用共享布局,这就是我想开始的。
注意:关于路由名称空间的.net核心文档仅限于常见的用例和方法签名,这是没有用的,因为默认站点模板以该代码开头。一篇关于mvc路由的老文章使我想到尝试上面的代码,但仍然不知道后台发生了什么。