c# - 为什么我的 ASP.NET MVC 路由中有查询字符串?

标签 c# asp.net asp.net-mvc routing

在我正在开发的 ASP.NET MVC(测试版)站点上,有时对 ActionLink 的调用会向我返回包含查询字符串的 URL。我已经隔离了产生这种行为的情况,但我仍然不明白为什么它决定使用查询字符串参数而不是产生一个干净的 URL。我知道它们在功能上是相同的,但为了 URL 的一致性(和外观),这不是我想要的。

这是我的路线:

routes.MapRoute(
    "Photo Gallery Shortcut",
    "group/{groupname}",
    new { controller = "Photos", action = "All", Id = "" });

routes.MapRoute(
    "Tagged Photos", //since the Tagged action takes an extra parameter, put it first
    "group/{groupname}/Photos/Tagged/{tagname}/{sortby}",
    new { controller = "Photos", action = "Tagged", Id = "", SortBy = "" });

routes.MapRoute(
    "Photo Gallery", //since the Gallery's defualt action is "All" not "Index" its listed seperatly
    "group/{groupname}/Photos/{action}/{sortby}",
    new { controller = "Photos", action = "All", Id = "", SortBy = "" });

routes.MapRoute(
    "Group",  //<-- "Group" Category defined above
    "group/{groupname}/{controller}/{action}/{id}",
    new {controller = "Photos", action = "Index", Id = ""});

现在只有当我查看名为“Tagged Photos”的路由描述的 View 并通过以下方式执行 ActionLink 时才会出现问题:

Html.ActionLink<PhotosController>(p => p.All((string)ViewData["group"], ""), "Home")

生成 URL:

http://domain/group/GROUPNAME?sortBy=

从任何其他 View 生成的 URL 是:

http://domain/group/GROUPNAME

我拉下了 Phil 的 ASP.NET Routing Debugger ,一切都按顺序出现。这个让我难住了。有什么想法吗?

最佳答案

不确定为什么不同的 View 会生成不同的 URL。

但是您可以通过为第一个路由分配默认值来摆脱 sortBy 参数。

新的 { sortBy = ""}

在生成过程中,如果 sortBy 匹配默认值,路由引擎将跳过该参数(如果它在查询字符串中)。

关于c# - 为什么我的 ASP.NET MVC 路由中有查询字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/224484/

相关文章:

c# - 多个复选框和枚举

c# - asp/mvc应用中使用错误提示

c# - 以编程方式在 GridView 列上显示数据

c# - 在 .NET Web 应用程序中填充缓存时的线程管理

c# - 上传的 HttpPostedFile 为空

c# - CaSTLe Windsor - 组件的登台与生产连接字符串参数

c# - 如何创建具有静态图像大小的 ListView Xamarin Forms

c# - 用于创建团队的 Microsoft Graph Beta 调用返回错误请求

c# - RijndaelManaged 的​​ AES OFB 加密

asp.net-mvc - 直接访问发布数据