为什么 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();
});
那么你应该主要使用属性路由
我有一个 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();
});
那么你应该主要使用属性路由