使用标记助手生成无索引的URL

时间:2016-10-21 11:30:51

标签: c# asp.net-core

我有一个看起来像这样的行动链接

<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。也许有人知道怎么样?

1 个答案:

答案 0 :(得分:1)

使用具有您需要路线的路线属性来装饰您的控制器动作。

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

这样您的控制器操作就成为默认操作。请确保其他方法有不同的签名。

<强>更新

要在Startup类中设置路由,正确定义路由规则的顺序非常重要。每ASP.NET Routing Documentation

  

按顺序处理路径集合。请求寻找匹配   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?}");
});