我有一个看起来像这样的行动链接
<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。也许有人知道怎么样?
答案 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?}");
});