与stackoverflow一样,您有domain/questions/{id}/{title}
你实际发送的标题并不重要,如果它不是问题的实际标题,它会自动对标准网址进行永久redirect 302
。
这一切都很好。
我想知道他们是如何在问题列表中创建链接的。 由于问题ID不足以创建网址。
可以通过路由自动完成吗?
必须实施某种大词典吗?
您是否将标题传递给列出问题的所有视图?
因此,您最终会在链接中使用@Url.Action("Question", new {id = item.QuestionId, title = item.QuestionTitle.ToPrettyUrl()});
。
我必须创建一个类似于此的场景,我有兴趣知道幕后是否有任何魔法或我现在无法思考的解决方案。
答案 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)