【问题标题】:Redirect to more specific URL via routing通过路由重定向到更具体的 URL
【发布时间】:2014-11-20 13:19:40
【问题描述】:

我在我的项目中使用以下路由

routes.MapRoute(
    "ProductRoute", // Route name
    "product/{id}/{title}", // URL with parameters
    new { controller = "product", action = "Index", id = UrlParameter.Optional }, // Parameters defaults
    new[] { "PriceCompare.Controllers" }
    );

当前的问题是如何返回显示 url。可以通过以下任一方式访问 URL:

一切都很好,因为所有这些 URL 都重定向到所需的位置。但是,我认为即使有人使用第二种或第三种方法,浏览器中的返回 URL 也应该显示第一个 URI。

就像 StackOverflow。例如,如果您访问以下网址

stackoverflow.com/questions/734249/,您的浏览器地址将在浏览器中显示完整的 URL stackoverflow.com/questions/734249/asp-net-mvc-url-routing-具有多个路由值

如何做到这一点?

【问题讨论】:

  • 您应该评估title 参数对您的操作。如果它是空的,你应该从数据库中获取标题并重定向到带有标题的url
  • 当有人进入特定 URL 时,您需要执行 301 重定向,这就是 StackOverflow 的工作原理。你如何选择重定向可能是个问题。
  • 您可以使用操作过滤器as per this example

标签: c# asp.net-mvc-3 url-routing


【解决方案1】:

您可以实现自己的Route 或在您的操作中执行类似的操作:

public ActionResult Index(int? id, string title = null)
{
    if (String.IsNullOrWhiteSpace(title))
    {
         var product = // load product
         return Redirect(Url.Action("Index", "Product",
                                    new { id = id, title = product.Title }));
    }

    // your code
}

【讨论】:

    猜你喜欢
    • 2017-07-25
    • 2018-01-12
    • 1970-01-01
    • 2013-08-31
    • 2014-03-06
    • 2022-07-07
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多