You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在ASP.Net Core 2中使用Tag Helper生成友好URL的方法

如何用Tag Helper生成友好URL

嘿,这个问题其实是路由配置和Tag Helper配合的事儿,我来给你一步步说清楚:

首先得明白,Tag Helper生成的URL格式完全依赖于你在ASP.NET Core里配置的路由规则。你现在得到的是查询字符串格式(/Article/FilterByTag?tagId=2),是因为当前路由里没有把tagId定义为路由路径的一部分,所以框架自动把它转成了查询参数。

要生成你想要的/Article/FilterByTag/2或者/Article/FilterByTag/tagId=2格式,只需要两步:


1. 配置对应的路由规则

你有两种常用的配置方式,选一种适合你的就行:

方式一:使用属性路由(推荐,更灵活)

直接在ArticleController的FilterByTag动作上添加路由特性,指定URL模板:

public class ArticleController : Controller
{
    // 生成 /Article/FilterByTag/2 格式
    [Route("Article/FilterByTag/{tagId}")]
    public IActionResult FilterByTag(int tagId)
    {
        // 你的业务逻辑
        return View();
    }

    // 如果想要 /Article/FilterByTag/tagId=2 格式,就改成这个路由模板
    // [Route("Article/FilterByTag/tagId={tagId}")]
}

方式二:修改全局路由配置

如果你想为Article控制器单独配置路由规则(避免影响其他控制器),可以在Program.cs(ASP.NET Core 6+)或者Startup.cs(旧版本)里添加专属路由:

// Program.cs 里的路由配置
app.MapControllerRoute(
    name: "article-tag",
    pattern: "Article/FilterByTag/{tagId}",
    defaults: new { controller = "Article", action = "FilterByTag" });

2. 调整Tag Helper代码(基本无需改动)

你的原有Tag Helper代码逻辑没问题,只要路由里的参数名和Tag Helper里的asp-route-*后缀一致,框架就会自动把参数填充到路由路径里,而不是查询字符串:

<a asp-controller="Article" asp-action="FilterByTag" asp-route-tagId="@tag.Id" title="@tag.Description">
    <span class="badge badge-dark">@tag.Title</span>
</a>

关键验证点:

  • 控制器动作的参数名必须和路由模板里的参数名完全一致(比如这里都是tagId)
  • 如果tagId是必填参数,路由模板里的{tagId}不要加问号(?);如果允许可选,再添加问号

这样配置完成后,Tag Helper就会生成你想要的友好URL啦!


内容的提问来源于stack exchange,提问作者x19

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:34:57