ASP.NET MVC如何基于路由创建操作链接

时间:2013-08-08 22:10:26

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

与stackoverflow一样,您有domain/questions/{id}/{title}

你实际发送的标题并不重要,如果它不是问题的实际标题,它会自动对标准网址进行永久redirect 302

这一切都很好。

我想知道他们是如何在问题列表中创建链接的。 由于问题ID不足以创建网址。

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

必须实施某种大词典吗?

您是否将标题传递给列出问题的所有视图? 因此,您最终会在链接中使用@Url.Action("Question", new {id = item.QuestionId, title = item.QuestionTitle.ToPrettyUrl()});

我必须创建一个类似于此的场景,我有兴趣知道幕后是否有任何魔法或我现在无法思考的解决方案。

2 个答案:

答案 0 :(得分:0)

是的,无论何时渲染链接,您都需要像拥有标题一样指定标题。

当然,你总是可以创建一个帮助方法来创建这些链接,并传递参数以确保你总是包含友好的标题。

对于重定向,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)
}

答案 1 :(得分:0)

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

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

这也将在MVC 5中发布。