【发布时间】:2019-10-30 21:20:46
【问题描述】:
我找不到任何有关中间件端点模式字段格式的文档/详细信息。或者根本就没有端点。仅用于路由的常见用例场景示例。
我想做的是接受这样的请求:
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/ 的内容
我原以为当我没有输入 Account 或 Manage 时,它会掉到空白路径并停在那里。但似乎在它到达那里之后它会做一些其他的事情。我想要的一半已经完成了哈哈。
最新更新 目前,我有这个工作与最小的错误。从概念上讲,在制作这些时,我认为模式是我的应用程序中存在的结构(控制器 > 操作 > 参数,这与我最初想象的相反。(模式是用户请求的内容*)
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:" 在请求中添加引号中的名称。 "defaults:" 操纵请求。我能够注入控制器和动作。
另外需要注意的是,这些端点会影响为使用 asp-* 的链接生成的路由
【问题讨论】:
标签: c# .net-core asp.net-core-mvc