【问题标题】:ASP.NET MVC How to create action links based on routingASP.NET MVC 如何基于路由创建动作链接
【发布时间】:2013-08-11 03:09:38
【问题描述】:

像 stackoverflow 一样,你有 domain/questions/{id}/{title}

您实际发送的标题无关紧要,如果它不是问题的实际标题,它会自动对规范网址执行永久redirect 302

这一切都很好。

我想知道的是他们如何在问题列表中创建链接。 由于只有问题 id 不足以创建 url。

可以通过路由自动完成吗?

必须实现某种大字典吗?

您将标题传递给列出问题的所有视图? 所以你最终会在你的链接中得到类似:@Url.Action("Question", new {id = item.QuestionId, title = item.QuestionTitle.ToPrettyUrl()});

我必须创建一个与此类似的场景,我有点想知道幕后是否有任何魔法或我现在无法想到的解决方案。

【问题讨论】:

    标签: asp.net-mvc-4 asp.net-mvc-routing url.action


    【解决方案1】:

    是的,每当您呈现链接时,您都需要像拥有它一样指定标题。

    当然,您始终可以创建一个帮助方法来创建这些链接,并只需传入参数以确保您始终包含友好的标题。

    对于重定向,StackOverflow 执行 301 永久重定向,而不是 302 临时重定向。

    我对此的一般方法如下:

    public ActionResult QuestionDetail(int id, string title)
    {
       var question = service.GetQuestion(id);
    
       if(title != question.Title.ToPrettyUrl())
       {
         var redirUrl = string.Format("/question/{0}/{1}", id, question.Title.ToPrettyUrl());
         return RedirectPermanent(redirectUrl);
       }
    
      return View(question)
    }
    

    【讨论】:

      【解决方案2】:

      Stackoverflow 使用内部属性路由代码。

      类似于http://attributerouting.net/ 属性路由所做的事情。

      这也将在 MVC 5 中提供。

      【讨论】:

        猜你喜欢
        • 2019-01-30
        • 2013-07-26
        • 2013-12-27
        • 2017-12-18
        • 1970-01-01
        • 2013-01-15
        • 1970-01-01
        相关资源
        最近更新 更多