Asp.net mvc 如何在MVC中创建短URL?

Asp.net mvc 如何在MVC中创建短URL?,asp.net-mvc,model-view-controller,routing,routes,short-url,Asp.net Mvc,Model View Controller,Routing,Routes,Short Url,假设我想像纸质目录一样发布一些易于键入/记住的短URL,但我希望它们重定向到一个冗长的、SEO友好的URL。我如何通过MVC路线实现这一点 例如: 变成 以行程为控制器 我尝试过的事情: 只需为它设置一条路线。问题:URL在其所在的浏览器/disney中没有更改 使用NuGet package RouteMagic请参见。问题:我得到一个错误:RouteData必须包含一个名为“controller”的项,该项的字符串值为非空。我想这是因为在我的控制器旅行之前,我没有一个静态的词,就像他对foo

假设我想像纸质目录一样发布一些易于键入/记住的短URL,但我希望它们重定向到一个冗长的、SEO友好的URL。我如何通过MVC路线实现这一点

例如:

变成

以行程为控制器

我尝试过的事情:

只需为它设置一条路线。问题:URL在其所在的浏览器/disney中没有更改

使用NuGet package RouteMagic请参见。问题:我得到一个错误:RouteData必须包含一个名为“controller”的项,该项的字符串值为非空。我想这是因为在我的控制器旅行之前,我没有一个静态的词,就像他对foo和bar所做的那样

使用重定向模块,如。问题:当创建我不想要的URL时,我的HTML.ActionLinks上的路由匹配Haacked在他的文章中提到了这一点,并说这就是为什么他让GetVirtualPath返回NULL。。。? 我没有主意了,所以任何人都会很感激的!
谢谢

要缩短URL,应该使用URL重写技术

有关此主题的一些教程:


要缩短URL,应该使用URL重写技术

有关此主题的一些教程:


您可以设置一个catch-all类型的路由,将所有/something请求定向到特定的操作和控制器,例如:

routes.MapRoute(
    "ShortUrls",
    "{name}",
    new {controller = "ShortUrl", action = "Index", name = UrlParameter.Optional}
);
取决于其余路由的设置方式,您可能不想完全这样做,因为这可能会给您带来一些严重的路由问题-但为了简单起见,这里可以这样做

然后根据指定的值将操作重定向到所需的URL:

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]);
    }
}

您可以设置一个catch-all类型的路由,将所有/something请求定向到特定的操作和控制器,例如:

routes.MapRoute(
    "ShortUrls",
    "{name}",
    new {controller = "ShortUrl", action = "Index", name = UrlParameter.Optional}
);
取决于其余路由的设置方式,您可能不想完全这样做,因为这可能会给您带来一些严重的路由问题-但为了简单起见,这里可以这样做

然后根据指定的值将操作重定向到所需的URL:

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]);
    }
}

我只是面临同样的问题。 在我的全球报告中:

routes.MapRoute(
    "ShortUrls",
    "{name}",
    new { controller = "Home", action = "Index", name = UrlParameter.Optional }
);
在我的家庭控制器中:

public ActionResult Index(string name)
{
    return View(name);
}

这种方式是动态的,我不想每次需要添加新页面时都重新编译。

我只是遇到了同样的问题。 在我的全球报告中:

routes.MapRoute(
    "ShortUrls",
    "{name}",
    new { controller = "Home", action = "Index", name = UrlParameter.Optional }
);
在我的家庭控制器中:

public ActionResult Index(string name)
{
    return View(name);
}

这种方式是动态的,我不想每次需要添加新页面时都要重新编译。

这种方法的问题是我已经有了一个catchall路由,所以这不起作用…很遗憾。如果你在ShortURL catchall中添加了一个路由约束,使其只匹配指定的字符串列表,这对你有效吗?Kristian,成功了!在重新阅读你的帖子之后-为了真正理解你的提议几天来,我一直在研究路径约束,然后想出一个可以工作的正则表达式,然后修复我的打字错误,你能相信吗?在这一点点代码中,有三个!?!??,我终于成功了。。。我简直不敢相信!非常感谢。这种方法的问题是我已经有了一个catchall路由,所以这不起作用…不幸的是。如果你在shortURL catchall中添加了一个路由约束,只匹配指定的字符串列表,这对你有用吗?Kristian,有效!在重新阅读你的帖子之后-为了真正理解你的提议几天来,我一直在研究路径约束,然后想出一个可以工作的正则表达式,然后修复我的打字错误,你能相信吗?在这一点点代码中,有三个!?!??,我终于成功了。。。我简直不敢相信!非常感谢。4Guys的文章是非MVC的,我想这是自2008年写这篇文章以来的第一篇。第二篇是唯一相关的,没有告诉我任何有用的东西。4Guys的文章是非MVC的,我怀疑这是自2008年写以来的第一篇。第二个是唯一相关的,没有告诉我任何有用的东西。