在 Razor 视图中为包含参数的属性路由创建 URL

Create URL in Razor View for Attribute Route containing parameters

我在下面的控制器中指定了一条路由,其中​​包含与操作上的重载相匹配的参数。

public class OrganisationsController : Controller
{
    [HttpGet]
    [Route("organisations/{id}/employees")]
    public ActionResult Employees(int id)
    {
        //  Some code here
    }
}

我正在尝试使用 @Html.ActionLink 在 Razor 视图中创建 URL 以匹配控制器上指定的路由,例如 localhost:55416/Organisations/2/Employees,但我还没有能够让它工作。

我能得到的最接近的是 localhost:55416/Organisations/Employees/2,它因为路线错误而不起作用,或者 localhost:55416/Organisations/Employees?id=2 实际上在组织控制器上的 Employees 操作被击中时起作用,但它只是一个查询字符串,它否定了首先添加 [Route("organisations/{id}/employees")] 路由的目的。

我在互联网上找到的所有示例和帖子都处理最后的参数,例如 [Route("organisations/employees/{id}")],而不是在控制器和操作之间。

我没有尝试将自定义路线添加到 RouteConfig,因为在我看来 URL 是起点,需要根据指定的路线首先正确控制器,还是我错了?

有没有一种方法可以让我按照我想要的方式使用 ActionLink 生成 URL,或者我是否需要另一种方法来执行此操作?

功劳归于 Sam,他提供的 ActionLink 是正确的,我尝试时它不起作用的原因是因为我没有将 routes.MapMvcAttributesRoutes(); 行添加到 RouteConfig.cs我试图在其中创建 URL 的项目,在添加它之后,预期的 localhost:55416/Organisations/2/Employees url 由 @Html.ActionLink("Employees", "Employees", "Organisations", new { id = item.Id }, null) 操作 link.[=14 生成=]

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapMvcAttributeRoutes();

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}