【发布时间】:2023-03-15 03:27:01
【问题描述】:
我正在尝试使用 ASP.Net MVC 3 编写一个非常简单的 CMS 系统原型。
系统有一个控制器,有两个动作:显示和创建。
“显示”操作的格式最多包含 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")
[“是”代表问题“您要为此路径创建页面吗?”的答案]
因此,在测试“默认”路由时,我看到以下所有路径都成功调用了“显示”操作: {空的} 一种 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”时才有效?
我知道我很白痴,请帮帮我
桑迪
【问题讨论】:
-
不久前我遇到了类似的问题。尝试将
UrlParameter.Optional更改为""
标签: asp.net asp.net-mvc routing url-rewriting asp.net-mvc-3