Asp.net mvc 5 MVC属性路由添加区域查询字符串参数

Asp.net mvc 5 MVC属性路由添加区域查询字符串参数,asp.net-mvc-5,asp.net-mvc-routing,Asp.net Mvc 5,Asp.net Mvc Routing,我尝试过通过各种方法将Route属性添加到控制器中 [Route("Trials/{trialId:int}/Components/{action}")] public partial class ComponentsController : Controller { public virtual ActionResult List(int trialId) { return View(); } } 或 这只是几个例子 生成的指向此控制器/操作的链接如下

我尝试过通过各种方法将Route属性添加到控制器中

[Route("Trials/{trialId:int}/Components/{action}")]
public partial class ComponentsController : Controller
{
    public virtual ActionResult List(int trialId)
    {
        return View();
    }
}

这只是几个例子

生成的指向此控制器/操作的链接如下所示:

我希望删除查询字符串参数。无论我如何放置带有属性的路由配置,它似乎永远不会工作

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

        routes.MapMvcAttributeRoutes();

        //routes.MapRoute(
        //    name: "TrialComponents",
        //    url: "Trials/{trialId}/Components/{action}/{id}",
        //    defaults: new {controller = "Components", action = "List", area = "", id = UrlParameter.Optional},
        //    constraints: new { trialId = "\\d+"}
        //);

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "UnitGroups", action = "List", area = "", id = UrlParameter.Optional }
        );
    }
}
注释掉的路由有效,并且不会对url应用查询字符串


有人能解释为什么route方法要添加Area querystring,以及我如何修复它吗?我被难住了。

区域不是存储在
RouteData.Values
集合中的路由值,而是存储在
RouteData.DataTokens
集合中(作为元数据)。在
routedCollection
中为
区域设置默认值是不正确的,因为这只应用于请求的
routedData.Values

简而言之,要从生成的URL中删除
区域
参数,需要将其作为
映射路由
中的默认值删除

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

我今天想试一下,但还是一样。我仍然使用Area=作为查询字符串。
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "UnitGroups", action = "List", id = UrlParameter.Optional }
);