具有多个路由值的 ASP.NET MVC URL 路由

标签 asp.net asp.net-mvc url-routing

当我有一条需要多个参数的路线时,我在使用 Html.ActionLink 时遇到了问题。例如,假设我的 Global.asax 文件中定义了以下路由:

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

routes.MapRoute(
    "Tagging",
    "{controller}.mvc/{action}/{tags}",
    new { controller = "Products", action = "Index", tags = "" }
);

routes.MapRoute(
    "SlugsAfterId",
    "{controller}.mvc/{action}/{id}/{slug}",
    new { controller = "Products", action = "Browse", id = "", slug = "" }
);

前两条路线工作没有问题,但是当我尝试使用以下方法创建指向第三条路线的操作链接时:

<%= Html.ActionLink(Html.Encode(product.Name), "Details", new { id = product.ProductId, slug = Html.Encode(product.Name) }) %>

我最终得到的 URL 类似于 [site-root]/Details/1?slug=url-slug,而我希望 URL 更像 [site-root]/详细信息/1/url-slug

谁能看出我哪里出错了?

最佳答案

它正在使用完全满意的第一条路线。尝试将您的 SlugsAfterId 路由放在 Default 路由之上。

它基本上是这样的:“检查默认值。有一个操作吗?是的。有一个 ID?是的。使用这个并丢弃查询字符串中的任何其他参数。”

顺便说一句,这样做会使您的 Default 路由变得多余,因为您为 slug 参数提供了默认值。

关于具有多个路由值的 ASP.NET MVC URL 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/734249/

相关文章:

c# - 全局异常处理 Web Api 2

javascript - 简单的前端 Controller 导致 php 中的 css 和 javascript 损坏

php - Zend2 Routing __NAMESPACE__ 不起作用或被忽略

c# - 在 MVC 5 中读取和使用 appsettings.json 中的设置

python - SQLAlchemy 和 Pyramid,如何从上下文中获取资源?

c# - 将存储库缩减为聚合根

javascript - Asp 按钮禁用 asp 日历上的月份更改

asp.net - .NET Core WebAPI + OpenIdDict(凭证流)和 Angular2 客户端 : 401 after successful login (full repro)

javascript - 重新加载部分 View 和 Ajax - ASP.NET MVC

c# - 添加具有相同接口(interface)的 HttpClient 最终具有相同的基本 url Asp.Net Core