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