1

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

  • /MySite - 默认带您到主页/索引
  • /MySite/SomeController/SomeAction - 默认带你到指定的控制器/动作

但我也想做:

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

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

4

1 回答 1

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);
        }
    }
}
于 2013-04-05T21:14:25.277 回答