我需要生成一个具有“系统”功能的导航系统。和'类别' archons或buttons。系统和类别使用相同的控制器。我想使用[Route()]
代替Startup
文件进行路由。
对于类别执政官工作很棒:
<a asp-area="Admin" asp-controller="@value.Controller" asp-action="@Constants.Route.List" asp-route-valueId="@value.ValueId">@value.Value</a>
但我不知道如何使用相同的控制器来管理/系统/列表&#39;而不是admin / categorytype / list,到目前为止我尝试过:
1)
<a asp-area="Admin" asp-route="System" asp-action="@Constants.Route.List" asp-route-valueId="@value.ValueId">@value.Value</a>
2)
<a asp-route="Admin/System/List" asp-route-valueId="@value.ValueId">@value.Value</a>
并在控制器
[Area("Admin")]
[Route("Admin/[controller]")]
[Route("Admin/System")]
[Authorize]
public class CategoryTypeController : Controller {}
[Route("[action]")]
public ViewResult List(int valueId) {}
第3)
<a href="@Url.RouteUrl("SystemValue", new { valueId = value.ValueId })">@value.Value</a>
并在控制器
[Area("Admin")]
[Route("Admin/[controller]")]
[Route("Admin/System", Name = "SystemValue")]
[Authorize]
public class CategoryTypeController : Controller {}
[Route("[action]")]
public ViewResult List(int valueId) {}
以上路由都没有生成url,允许我通过/ admin / system / list
转到CategoryType控制器和List操作我在app.UseMvcWithDefaultRoute();
档案中也有Startup
。
修改
当我手动输入地址/admin/system/list
时 - 路由器工作,
但我无法为按钮或执政官生成这样的网址以匹配/admin/system/list
修改
我找到了一个解决方案,但我对此并不满意,事实证明我不了解路由的工作原理。对我来说, [Route ()]
属性是定义路径的一种方式,app.UseMvc()
是第二种方式。我必须在两个地方定义路线。
在 Startup.cs
app.UseMvc(routes =>
{
routes.MapRoute(
name: "SystemValue",
template: "Admin/System/List/{id?}",
defaults: new { area = "Admin", controller = "CategoryType", action = "List" });
});
控制器
[Area("Admin")]
[Route("Admin/[controller]")]
[Route("Admin/System", Name = "SystemValue")]
[Authorize]
public class CategoryTypeController : Controller
{}
[Route("[action]")]
public ViewResult List(int valueId) {}
查看
<a href="@Url.RouteUrl("SystemValue", new { valueId = value.ValueId})">@value.Value</a>
我仍然会寻找一个解决方案,如何只使用 [Route ("")]
答案 0 :(得分:1)
如果要单独指定路由,可以使用命名路由,但需要在方法上指定,而不是在控制器上指定。
[Route("/admin/system/list/{id}",name ="SystemList")]
[Route("/admin/category/list/{id}",name ="CategoryList")]
public IActionResult List(int id)
{
...
}
您可以为此路线生成
的网址<a asp-route="CategoryList" asp-route-id="@value.ValueId">@value.Value</a>
路由系统可以使用在启动时声明的路由或使用由属性声明的路由,但它们不会混合,当您在控制器级别指定路由属性时,将忽略启动路由。