使用标签助手生成没有索引的URL

本文关键字:索引 URL 标签 | 更新日期: 2023-09-27 18:14:26

我有一个像这样的动作链接

<a asp-controller="Complaint" asp-action="Index" asp-route-id="@complaint.Id">

这将生成链接/投诉/索引/be8cd27e-937f-4b7d-9004-e6894d1eebea

我想链接没有索引。我试着给Startup添加一条新路由,但是没有成功。

routes.MapRoute(
    "defaultNoAction",
    "{controller=Complaint}/{action=Index}/{id}");

我找不到任何文档来查看是否有可能在没有索引的情况下使用标记帮助器生成URL。也许这里有人知道怎么做?

使用标签助手生成没有索引的URL

用一个route属性来修饰你的控制器动作,该属性将包含你需要的路由。

[Route("Complaints/{id}")]
public IActionResult Index(string id)
{
    return View();
}

这样你的控制器的动作就会变成默认的。请确保其他方法有不同的签名。

要在Startup类中设置路由,必须正确定义路由规则的顺序。/ASP。. NET路由文档:

按顺序处理路由集合。中查找匹配项通过URL匹配收集路由。响应使用路由生成url。

这意味着你的特定规则应该放在前面,默认路由模板应该放在后面,就像一个包罗万象的规则。在你的情况下,下面的代码应该可以解决这个问题。

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "complaints",
        template: "complaints/{id}",
        defaults: new { controller = "Complaints", action = "Index" });
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});