C# 如何添加和处理domain.com/?latest的路由

C# 如何添加和处理domain.com/?latest的路由,c#,asp.net-mvc,asp.net-mvc-2,asp.net-mvc-routing,C#,Asp.net Mvc,Asp.net Mvc 2,Asp.net Mvc Routing,我正在尝试处理以下url:(1)domain.com,(2)domain.com/?latest 这就是我认为应该是的 Global.asax routes.MapRoute( "HomeIndex", // Route name "/?{sortBy}", // URL with parameters new { controller = "Home", action = "Index", sortBy = UrlParemeter.Optional } // Para

我正在尝试处理以下url:(1)domain.com,(2)domain.com/?latest

这就是我认为应该是的

Global.asax

routes.MapRoute(
    "HomeIndex", // Route name
    "/?{sortBy}", // URL with parameters
    new { controller = "Home", action = "Index", sortBy = UrlParemeter.Optional } // Parameter defaults
);
HomeController.cs

public ActionResult Index(string sortBy) {
    if (string.IsNullOrEmpty(sortBy))
        // display stuff in a way that's sorted
    else
        // just display stuff by default
    return View( ... );
}
问题:mvc不喜欢以硬编码“?”开头的路线,但是!,如果根本不映射路由,只查找request.querystring[“latest”],它将显示为null

实现这一目标的最佳方式是什么?谢谢

----编辑:

我知道我不应该只使用/?latest,而应该使用/?sortBy=latest,但是,它是一个较短的url!!!1和更容易输入:)我看到谷歌有时会使用它,我想像谷歌一样;)


撇开这不是最好的方法这一事实不谈,有什么方法可以做到这一点吗?谢谢

您的查询字符串不完整。试试这个:domain.com/?sortBy=latest。您也可以删除额外的路由映射,并使用默认路由。

在路由定义中不需要sortBy。只需确保action方法有一个同名的参数

routes.MapRoute(
    "HomeIndex", // Route name
    "", // URL with parameters
    new { controller = "Home", action = "Index" } // Parameter defaults
);

是的,在您的路线中,最新的零件不合格。它应该总是以
?varname=varvalue

的形式出现,但我看到谷歌正在这样做!键入更容易:)我试图避免使用?key=value,以使url更短。有可能吗??谢谢然后,您可以尝试检查查询字符串是否包含“latest”:Request.QueryString.contains(“latest”)(或以开头)。