【问题标题】:MVC Attribute Routing adding Area Querystring ParameterMVC 属性路由添加区域查询字符串参数
【发布时间】:2015-09-04 16:07:01
【问题描述】:

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

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

或者

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

只是几个例子。

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

http://localhost:50077/Trials/3/Components?Area=

我正在寻找删除查询字符串参数。无论我如何放置带有属性的路由配置,它似乎都无法正常工作。

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。

谁能解释为什么路由方法要添加区域查询字符串以及如何修复它?我被难住了。

【问题讨论】:

    标签: asp.net-mvc-5 asp.net-mvc-routing


    【解决方案1】:

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

    简而言之,要从生成的 URL 中删除 Area 参数,您需要将其作为默认值删除到 MapRoute 中。

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

    【讨论】:

    • 我今天开始尝试这个,但还是一样。我仍然有 Area= 作为查询字符串。
    猜你喜欢
    • 2018-10-24
    • 2014-05-28
    • 2017-01-26
    • 2016-01-01
    • 2015-05-20
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多