gpt4 book ai didi

asp.net - MVC 3 直通路由

转载 作者:行者123 更新时间:2023-12-02 04:02:07 24 4
gpt4 key购买 nike

很抱歉问了一个相当 n00b 的问题,我对 ASP.NET MVC 很陌生。
我的问题如下:

我希望我的网站以下列方式处理 URL:

www.mysite.com/homepage/name

我希望上面的链接转到该用户的个人资料。为简单起见, Controller 将是具有测试操作的主页 Controller 。

这意味着 global.asax 路由将是:
routes.MapRoute(
"test",
"homepage/{name}",
new { controller = "Homepage", action = "Test" }
);

到目前为止,代码运行良好(我已经对其进行了测试,并且路由正常)。

但现在我想要启用的其他功能是:
www.mysite.com/homepage/action/id

工作也是如此。

路由将是:
routes.MapRoute(
"Default",
"homepage/{action}/{id}",
new { controller = "Homepage", action = "Index", id = UrlParameter.Optional }
);

问题是当用户想要省略 Action 的 {id} 时会发生什么,路由表检测到 Action 名称实际上是 {name} 参数。

有没有办法先检查一个 Action 是否存在。并且只有在没有的情况下,才将其用作不同路线的参数。

说得通?如果没有,我会添加更多细节。

谢谢!

编辑

所以我设法使用约束正则表达式解决了这个问题
我在我的 Controller 中放置了一个定义所有 Action 的正则表达式:
routes.MapRoute(
"homepage",
"homepage/{action}/{id}",
new { controller = "Homepage", action = "Index", id = UrlParameter.Optional },
new { action = "(action1|action2|action3)" }
);

然后是下一条规则:
routes.MapRoute(
"feed",
"homepage/{id}",
new { controller = "Homepage", action = "Test"}
);

我工作正常,只是很难扩大规模。您需要记住将 Controller 上的每个新操作都放在此处的字符串中。这是调试噩梦的一个巨大开口。

谢谢 !

最佳答案

由于 ASP.NET MVC 从 RouteTable 中选择第一条路由匹配当前请求,您应该能够通过更改 Global.asax 中路由的顺序来解决此问题。

首先这个:

routes.MapRoute(
"Default",
"homepage/{action}/{id}",
new { controller = "Homepage", action = "Index", id = UrlParameter.Optional }
);

然后这个:
routes.MapRoute(
"test",
"homepage/{name}",
new { controller = "Homepage", action = "Test" }
);

希望这可以帮助。

关于asp.net - MVC 3 直通路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10028914/

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