你在做这样的事情时遇到的问题是以下内容会模棱两可:
/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);
}
}
}