如何隐藏URL中的参数/查询字符串?打造SEO友好型URL
解决SEO友好URL的生成问题
你已经在Startup.cs里配置了正确的自定义路由,这一步很棒!现在只需要确保页面上的编辑按钮能生成你想要的manage-your-project/{id}格式URL,而不是带查询参数的旧格式。咱们一步步来调整:
1. 修改视图中的编辑按钮链接
原来的按钮可能用了默认的Url.Action方法,这会生成带参数的URL。换成Url.RouteUrl并指定你定义的路由名称,就能精准匹配自定义路由了。示例代码如下:
@foreach (var item in Model) { count = count + 1; <tr> <td scope="row">@count</td> <td>@item.ProjectName</td> <!-- 这里替换成你实际的项目字段 --> <td> <!-- 用RouteUrl指定路由名称,生成友好URL --> <a href="@Url.RouteUrl("edit-project-route", new { id = item.Id })" class="btn btn-primary">编辑</a> </td> </tr> }
2. 确认路由配置的正确性
确保你的Startup.cs里的路由配置放在正确的位置,并且没有被其他路由优先级覆盖。完整的配置示例:
app.UseEndpoints(endpoints => { // 自定义编辑项目路由,要放在默认路由前面,优先级更高 endpoints.MapControllerRoute( name: "edit-project-route", pattern: "manage-your-project/{id?}", defaults: new { controller = "Manager", action = "EditProject" }); // 默认路由(如果需要保留的话) endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); });
⚠️ 注意:自定义路由要放在默认路由前面,不然会被默认路由先匹配到,导致友好URL不生效。
3. 检查Controller动作的参数匹配
你的ManagerController里的EditProject方法要正确接收id参数,参数名称必须和路由里的id?一致:
public IActionResult EditProject(int? id) { if (id == null) { return NotFound(); } // 这里写你的项目查询和编辑逻辑 return View(); }
4. 测试验证
运行项目后,右键点击编辑按钮,查看链接地址,应该是/manage-your-project/xxx(xxx是项目ID)的格式,而不是/Manager/EditProject?id=xxx。如果还是没生效,检查路由名称的拼写是否和Url.RouteUrl里的一致,参数名称是否完全匹配。
内容的提问来源于stack exchange,提问作者Techno Crave
相关产品推荐
相关产品推荐

