为什么 asp-route-id helper 没有根据我的 RouteAttribute 模板进行映射?

Why is asp-route-id helper not mapping in accordance with my RouteAttribute template?

我有一个 ASP.NET 具有 RouteAttribute 的核心端点:

[HttpGet]
[Route("MyController/MyAction/{id}")]
public async Task<IActionResult> GetAsync(int id, string rc)
{
    ...

请注意,我希望 id 作为 URL 的一部分传递,而 rc 作为查询字符串传递。

我有一个 MVC razor 页面,它应该使用锚点助手为这个控制器创建一个 link:

@foreach (var item in Model)
{
    <a asp-controller="MyController" asp-action="MyAction"
        asp-route-id="@item.Id" asp-route-rc=@item.Rc>Execute</a>
}

我希望这会创建一个带有 link:

的锚点
http://localhost:5000/MyController/MyAction/1?rc=234

但是它创建了一个锚 link:

http://localhost:5000/MyController/MyAction?id=1&rc=234

换句话说,它发送 id 作为查询字符串,而不是 URL 的一部分,尽管 RouteAttribute.

中有模板声明

关于原因有什么想法吗?

如果你希望它以你想要的方式工作,你必须在启动时像这样配置端点

app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");

            });

当你在默认路由中使用 id 时,html helper 将 id 值放在默认路由中的 id 位置。您可以使用其他名称而不是 id。然后你可以在 html 助手中使用这个名字。不是默认名称作为查询字符串参数添加到 url。

如果在你的初创公司

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();

});

那么你应该主要使用属性路由