ASP.Net MVC3:创建自定义URL,但没有确切的控制器名称

时间:2012-08-06 12:15:13

标签: asp.net-mvc routes friendly-url

对于一个项目,我(不幸地)会匹配一些确切的网址。

所以我认为这不会有问题,我可以使用“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错误:(当我试图访问它时。我做错了什么?

1 个答案:

答案 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中,你应该好好去。