尝试将我的ASP.NET Core 2.1应用程序升级到2.2并使用端点路由时遇到问题。链接生成的工作原理有所不同,我很确定它与此完全相关。
我在视图中使用链接生成来生成链接。在某些情况下,我目前正在执行以下操作:
let url = "@Url.Action(nameof(NoteController.Category), PortalControllerNames.Note)/" + categoryItem.dataset.categoryId + "/@Model.UserId";
此操作的路由定义如下,据我所知,基本上categoryId
和userId
是必需的:
[HttpGet("[controller]/[action]/{categoryId}/{userId}")]
在2.1中,对@Url.Action
的调用会生成以下内容
let url = "/Note/Category/" + categoryItem.dataset.categoryId + "/12345";
然后我可以在运行时通过javascript将其他参数插入其中。
在2.2中启用了端点路由的情况下,找不到路由,并且根据official docs返回了空字符串。
使用Url.Action
方法的好处是传递操作方法名称,并让系统为它们解析路由名称,这意味着对控制器名称的任何更改都是通过VS中的重构来进行的,并且任何路由名称的更改都是自动在应用程序中进行,无需更改视图。
我了解不存在要查找的路由,并认为这是问题的原因。解决方案是仅添加一条允许生成“基本”路由(不带参数)的路由吗? (我认为这会有副作用,您现在可以导航到该路线而无需提供参数,而由于没有满足任何路线,您目前会获得404?)
是否有人知道或有一个想法如何在新系统中保留链接生成的“强类型”性质,还是不可能了?
旁注
另一种解决方案也可能是为每个类别项目生成一个唯一的链接(这样您就可以使用链接生成),但这意味着您必须为每个类别生成一个链接并将其发送到响应中,这会增加发送的数据浏览器(我承认不是很多,但有一点帮助)
答案 0 :(得分:0)
您是否考虑过使用taghelpers?
看看“ asp-route- {value}”部分。
您可以将“ stub”值作为路由值,并使用Java脚本替换。