ActionLink 忽略属性路由设置

ActionLink ignoring attribute routing settings

我有一个 TextObject 控制器,它应该由“~/umt/text/{action}/{id?}”访问,正如在使用属性路由的控制器中定义的那样,但是操作 link:

@Html.ActionLink("Index", "Index", "TextObject")

忽略属性路由并使用常规路由定义,生成 ~/TextObject/ 而不是所需的 ~/umt/text/

TextObjectController:

[Authorize]
[RouteArea("umt")]
[RoutePrefix("text")]
[Route("{action=index}/{id?}")]
public class TextObjectController : Controller
{
   .....
    public async Task<ActionResult> Index()
    {
        return View(await db.TextObjects.ToListAsync());
    }
   .....
}

我的路线配置:

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

        AreaRegistration.RegisterAllAreas();

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

控制器是否需要任何额外的配置才能使操作 link 起作用或它不适用于属性路由?

我想保持简单,它会正确路由直接通过 url,但 ActionLink 助手似乎不喜欢它。

我看不到你指定了默认区域 RouteConfig 所以你的操作 link 应该是这样的:

@Html.ActionLink("TextObject", "Index", "Index", new { area = "umt" }, null)