视图中的ASP.NET Core端点路由链接生成

时间:2019-07-16 15:32:33

标签: c# asp.net-core asp.net-core-2.2 asp.net-core-routing

尝试将我的ASP.NET Core 2.1应用程序升级到2.2并使用端点路由时遇到问题。链接生成的工作原理有所不同,我很确定它与此完全相关。

我在视图中使用链接生成来生成链接。在某些情况下,我目前正在执行以下操作:

let url = "@Url.Action(nameof(NoteController.Category), PortalControllerNames.Note)/" + categoryItem.dataset.categoryId + "/@Model.UserId";

此操作的路由定义如下,据我所知,基本上categoryIduserId是必需的:

[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?)

是否有人知道或有一个想法如何在新系统中保留链接生成的“强类型”性质,还是不可能了?


旁注

另一种解决方案也可能是为每个类别项目生成一个唯一的链接(这样您就可以使用链接生成),但这意味着您必须为每个类别生成一个链接并将其发送到响应中,这会增加发送的数据浏览器(我承认不是很多,但有一点帮助)

1 个答案:

答案 0 :(得分:0)