【问题标题】:Change URL from controller?从控制器更改 URL?
【发布时间】:2012-11-09 11:59:53
【问题描述】:

有没有办法从控制器更改当前的 url 参数,以便在加载页面时,在地址栏中显示附加/不同的参数?

这就是我的意思,假设我有一个动作“产品”:

public ActionResult Product(int productId)
{
  ..
}

我映射了路由,以便product/4545/purple-sunglasses映射到上面的函数,产品名称实际上被忽略了,但我想要,如果没有指定产品名称,控制器应该添加这个,所以产品进入很容易在搜索引擎等中。

【问题讨论】:

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


    【解决方案1】:

    看看这里:http://www.dominicpettifer.co.uk/Blog/34/asp-net-mvc-and-clean-seo-friendly-urls

    有一个很长的描述如何做到这一点。最后一部分告诉您 301 重定向,您应该使用它来指示搜索引擎爬虫可以在您希望的所需 URL 下找到该页面。

    别忘了看看 url-encoding,应该可以为您节省一些工作并提供更高质量的 url。

    以下是博客文章中的一些基本 sn-ps:

    设置您的路由:

    routes.MapRoute( 
        "ViewProduct", 
        "products/{id}/{productName}", 
        new { controller = "Product", action = "Detail", id = "", productName = "" } 
    );
    

    将名称部分添加到您的控制器并检查它是否是正确的名称:

    public ActionResult Detail(int id, string productName) 
    { 
        Product product = IProductRepository.Fetch(id); 
    
        string realTitle = product.Title; // Add encoding here
    
        if (realTitle != urlTitle) 
        { 
            Response.Status = "301 Moved Permanently"; 
            Response.StatusCode = 301; 
            Response.AddHeader("Location", "/Products/" + product.Id + "/" + realTitle); // Or use the UrlHelper here
            Response.End(); 
        }
    
        return View(product); 
    }
    

    更新
    该网址显然已损坏。这篇文章描述了大部分相同的功能:http://www.deliveron.com/blog/post/SEO-Friendly-Routes-with-ASPnet-MVC.aspx

    感谢 Stu1986C 的评论/新链接!

    【讨论】:

    • 谢谢。顺便说一句,将链接内容的关键部分复制到您的帖子中始终是一个好习惯,因此如果明天该链接失效,用户仍然可以从您的答案中受益。它也将更容易获得,答案将更容易被人们看到。
    • 链接已失效。这是新的:deliveron.com/blog/post/…
    • 添加了答案的新链接。谢谢!
    • 从今天开始,这两个链接都已失效?
    • 这么久不见了也不足为奇。无论如何,基本的代码位都在答案中。
    猜你喜欢
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    • 2012-08-03
    • 2013-06-16
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 2019-02-02
    相关资源
    最近更新 更多