Asp.net mvc 4 ASP.NET MVC如何创建基于路由的操作链接

Asp.net mvc 4 ASP.NET MVC如何创建基于路由的操作链接,asp.net-mvc-4,asp.net-mvc-routing,url.action,Asp.net Mvc 4,Asp.net Mvc Routing,Url.action,与stackoverflow一样,您有domain/questions/{id}/{title} 不管你实际发送的标题是什么,如果它不是问题的实际标题,它会自动执行一个永久的重定向302到规范url 这一切都很棒 我想知道的是他们是如何在问题列表上创建链接的。 因为拥有问题id不足以创建url 可以通过路由自动完成吗 必须实施某种大词典吗 是否将标题传递给列出问题的所有视图? 因此,您将得到如下结果:@Url.Action(“问题”,新的{id=item.QuestionId,title=ite

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

不管你实际发送的标题是什么,如果它不是问题的实际标题,它会自动执行一个永久的
重定向302
到规范url

这一切都很棒

我想知道的是他们是如何在问题列表上创建链接的。 因为拥有问题id不足以创建url

可以通过路由自动完成吗

必须实施某种大词典吗

是否将标题传递给列出问题的所有视图? 因此,您将得到如下结果:
@Url.Action(“问题”,新的{id=item.QuestionId,title=item.QuestionTitle.ToPrettyUrl())在你的链接中


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

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

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

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

Stackoverflow使用内部属性路由代码

类似于属性路由的功能

这也将在MVC5中提供