我的网站有正常的默认路由和几个控制器。我想分发可以链接回主页/索引操作的“短URL”链接。例如,我可以做
但我也想这样做:
/ MySite / SomeID - 使用提供的id参数转到Home / Index。
我可以添加一个“shortUrl”路由并分发一个像“/ MySite / ShortUrl / SomeID”这样的网址,但有没有其他方法可以使用像上面那样的“id-only”网址?
答案 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);
}
}
}