对于一个项目,我(不幸地)会匹配一些确切的网址。
所以我认为这不会有问题,我可以使用“MapRoute”来匹配所需控制器的网址。但我不能让它发挥作用。
我要映射此网址:
http://{Host}/opc/public-documents/index.html
到
Area: opc
Controller: Documents
Action: Index
另一个例子是映射
http://{Host}/opc/public-documents/{year}/index.html
到
Area: opc
Controller: Documents
Action:DisplayByYear
Year(Parameter): {year}
我在我所在的区域(ocpAreaRegistration.cs
)尝试了这个,并取得了成功:
context.MapRoute("DocumentsIndex", "opc/public-documents/index.html",
new {area="opc", controller = "Documents", action = "Index"});
context.MapRoute("DocumentsDisplayByYear", "opc/public-documents/{year}/index.html",
new {area="opc", controller = "Documents", action = "Action:DisplayByYear"});
但我得到了一些404错误:(当我试图访问它时。我做错了什么?
答案 0 :(得分:2)
我不确定你为什么需要这样做(我只能假设你来自遗留应用程序),但这对我有用:
opcAreaRegistration.cs:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"opc_public_year_docs",
"opc/public-documents/{year}/index.html",
new { controller = "Documents", action = "DisplayByYear" }
);
context.MapRoute(
"opc_public_docs",
"opc/public-documents/index.html",
new { controller = "Documents", action = "Index" }
);
context.MapRoute(
"opc_default",
"opc/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
控制器:
public class DocumentsController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult DisplayByYear(int year)
{
return View(year);
}
}
确保将这些路由放在区域路由文件而不是global.asax中,你应该好好去。