首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么asp-route-id helper不能根据我的RouteAttribute模板进行映射?

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

Stack Overflow用户
提问于 2021-08-01 22:30:26
回答 1查看 39关注 0票数 1

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

代码语言:javascript
复制
[HttpGet]
[Route("MyController/MyAction/{id}")]
public async Task<IActionResult> GetAsync(int id, string rc)
{
    ...

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

我有一个MVC剃刀页面,它应该使用锚助手来创建到这个控制器的链接:

代码语言:javascript
复制
@foreach (var item in Model)
{
    <a asp-controller="MyController" asp-action="MyAction"
        asp-route-id="@item.Id" asp-route-rc=@item.Rc>Execute</a>
}

我希望这会创建一个带有链接的锚:

代码语言:javascript
复制
http://localhost:5000/MyController/MyAction/1?rc=234

而是创建一个带有链接的锚点:

代码语言:javascript
复制
http://localhost:5000/MyController/MyAction?id=1&rc=234

换句话说,它将id作为查询字符串发送,而不是作为URL的一部分,尽管RouteAttribute中有模板声明。

有什么想法可以解释原因吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-01 22:46:54

如果您希望端点按照您想要的方式工作,则必须在启动时像这样配置端点

代码语言:javascript
复制
app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");

            });

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

如果在你的初创阶段

代码语言:javascript
复制
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();

});

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68614833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档