如何使此ASP.NET路由正常工作?

san*_*ndy 5 asp.net asp.net-mvc routing url-rewriting asp.net-mvc-3

我正在尝试使用ASP.Net MVC 3编写一个非常简单的CMS系统原型.

系统有一个控制器,有两个动作:show和create.

"显示"操作的格式最多需要5个可选部分,例如domain.com/part1/part2/part3/part4/part5

"显示"操作的格式类似,但应具有领先的"创建"部分,例如domain.com/create/part1/part2/part3/part4/part5

我在global.asax中有以下设置:

    routes.MapRoute(
        "CreatePageRoute",
        "create/{part1}/{part2}/{part3}/{part4}/{part5}",
        new
            {
                controller = "Page",
                action = "Create",
                part1 = UrlParameter.Optional,
                part2 = UrlParameter.Optional,
                part3 = UrlParameter.Optional,
                part4 = UrlParameter.Optional,
                part5 = UrlParameter.Optional
            });

    routes.MapRoute(
        "Default",
        "{part1}/{part2}/{part3}/{part4}/{part5}",
        new
            {
                controller = "Page",
                action = "Show",
                part1 = UrlParameter.Optional,
                part2 = UrlParameter.Optional,
                part3 = UrlParameter.Optional,
                part4 = UrlParameter.Optional,
                part5 = UrlParameter.Optional
            }
        );
Run Code Online (Sandbox Code Playgroud)

如果我的"显示"方法无法找到与提供的路径匹配的页面,则会返回"未找到"页面,其中包含使用提供的路径创建新页面的选项.此链接使用以下内容定义:

@Html.ActionLink("Yes", "Create") 
Run Code Online (Sandbox Code Playgroud)

["是"代表问题的答案"你想为这条路径创建一个页面吗?"]

因此测试的 '默认' 的路线时,我看到我的 '显示' 操作成功地呼吁所有以下路径:{空} AA/BA/B/CA/B/C/DA/B/C/d/Ë

这很棒.

但是,由语句"@ Html.ActionLink("是","创建")"生成的结果"创建"链接会产生不一致的结果.它似乎根据输入的长度生成不同的超链接.结果如下:

对于路径"{empty}",链接提供"localhost {:port} /" - 我希望"localhost {:port}/create"

对于路径"/ a",链接提供"localhost {:port} /" - 我希望"localhost {:port}/create/a"

对于路径"/ a/b",链接提供"localhost {:port}/a" - 我希望"localhost {:port}/create/a/b"

对于路径"/ a/b/c",链接提供"localhost {:port}/a/b" - 我希望"localhost {:port}/create/a/b/c"

对于路径"/ a/b/c/d",链接提供"localhost {:port}/create/a/b/c/d" - 这是我希望的

对于路径"/ a/b/c/d/e",链接提供"localhost {:port}/create/a/b/c/d/e" - 这是我希望的

为什么只有在我提供"/ a/b/c/d"或"/ a/b/c/d/e"时它才有效?

我知道我是白痴,请帮助我

RP *_*yer 1

我认为多个可选参数导致了差异。
怎么样:

    routes.MapRoute("Create5", "create/{part1}/{part2}/{part3}/{part4}/{part5}", new { controller = "Page", action = "Create", part5 = UrlParameter.Optional });
    routes.MapRoute("Create3", "create/{part1}/{part2}/{part3}", new { controller = "Page", action = "Create", part3 = UrlParameter.Optional });
    routes.MapRoute("Create1", "create/{part1}", new { controller = "Page", action = "Create", part1 = UrlParameter.Optional });

    routes.MapRoute("Default5", "{part1}/{part2}/{part3}/{part4}/{part5}", new { controller = "Page", action = "Show", part5 = UrlParameter.Optional });
    routes.MapRoute("Default3", "{part1}/{part2}/{part3}", new { controller = "Page", action = "Show", part3 = UrlParameter.Optional });
    routes.MapRoute("Default1", "{part1}", new { controller = "Page", action = "Show", part1 = UrlParameter.Optional });
Run Code Online (Sandbox Code Playgroud)