gpt4 book ai didi

asp.net - 如何让这个 ASP.NET 路由正常工作?

转载 作者:行者123 更新时间:2023-12-04 21:50:53 25 4
gpt4 key购买 nike

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

该系统有一个具有两个操作的 Controller :显示和创建。

“显示”操作的格式最多包含 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
}
);

如果我的“显示”方法未能找到与提供的路径匹配的页面,它会返回一个“未找到”页面,其中包含使用提供的路径创建新页面的选项。此链接使用以下内容定义:
@Html.ActionLink("Yes", "Create") 

["is"代表问题“您要为此路径创建页面吗?”的答案]

因此,在测试“默认”路由时,我看到以下所有路径都成功调用了“显示”操作:
{空的}
一种
a/b
a/b/c
A B C D
a/b/c/d/e

这很棒。

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

对于路径“{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”时才有效?

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

最佳答案

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

    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 });

关于asp.net - 如何让这个 ASP.NET 路由正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4975430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com