如何在ASP.NET MVC中混合短URL和常规URL?

时间:2013-04-05 21:06:55

标签: asp.net-mvc asp.net-mvc-routing

我的网站有正常的默认路由和几个控制器。我想分发可以链接回主页/索引操作的“短URL”链接。例如,我可以做

  • / MySite - 将您带到Home / Index作为默认值
  • / MySite / SomeController / SomeAction - 将您带到默认的指定控制器/操作

但我也想这样做:

/ MySite / SomeID - 使用提供的id参数转到Home / Index。

我可以添加一个“shortUrl”路由并分发一个像“/ MySite / ShortUrl / SomeID”这样的网址,但有没有其他方法可以使用像上面那样的“id-only”网址?

1 个答案:

答案 0 :(得分:0)

你做这样的事情所带来的问题是,下面的内容会模糊不清:

/MySite/SomeID
/MySite/SomeController

您如何期望能够区分这两者?如果你不介意第二个是不可能的(即你在指定控制器时总是指定一个动作,那么你可以尝试这样的事情:

routes.MapRoute(
    "ShortUrl",
    "{id}",
    new { controller = "Home", action = "Index", id = Url.OptionalParameter }
);

routes.MapRoute(
    "Default",                                              
    "{controller}/{action}/{id}",                           
    new { controller = "Home", action = "Index", id = Url.OptionalParameter }
);

请求/MySite/SomeID然后应该采取与MySite/Home/Index/SomeID相同的操作。

如果您需要能够指定 和ID或控制器(默认操作),您可以执行以下操作(也使用上述路由):

public class HomeController : Controller
{
    public ActionResult Index(string id)
    {
        // If the ID represents something, show that something.
        if (IdMatchesSomeResource(id))
        {
            // Do something
            return View();
        }
        // Otherwise, treat it as a request for a controller.
        else
        {
            return RedirectToAction("Index", id);
        }
    }
}