假设我想发布(如纸质目录中)一些易于输入/记忆的“短网址”,但我希望它们重定向到详细的,SEO友好的网址。如何使用MVC路由实现这一目标?
示例:
成为
http://mysite.com/travel/planning-your-disney-vacation(以“旅行”为控制者)
我尝试过的事情:
只需为其设置路线即可。 问题:网址在浏览器中没有变化(它保持“/ disney”。
使用NuGet包RouteMagic(参见Haacked's article)。 问题:我收到错误:RouteData必须包含一个名为'controller'的项,其中包含非空字符串值。我想这是因为我的控制器(“旅行”)之前没有像他那样的静态词(用“foo”和“bar”)???
我没有想法,所以任何人都会感激不尽! 谢谢!
答案 0 :(得分:3)
您可以设置一个包含所有类型的路由,将所有/某些请求定向到特定的操作和控制器,例如:
routes.MapRoute(
"ShortUrls",
"{name}",
new {controller = "ShortUrl", action = "Index", name = UrlParameter.Optional}
);
(取决于您的路由的其余部分是如何设置的,您可能不希望这样做,因为它可能会导致一些严重的路由问题 - 但这样做是为了简单起见)< / p>
然后根据指定的值将您的操作重定向到所需的网址:
public class ShortUrlController : Controller
{
//
// GET: /ShortUrl/
public ActionResult Index(string name)
{
var urls = new Dictionary<string, string>();
urls.Add("disney", "http://mysite.com/travel/planning-your-disney-vacation");
urls.Add("scuba", "http://mysite.com/travel/planning-your-scuba-vacation");
return Redirect(urls[name]);
}
}
答案 1 :(得分:0)
要缩短网址,您应使用网址重写技术。
关于主题的一些教程: