asp.net - MVC 3 直通路由

标签 asp.net asp.net-mvc-3

很抱歉问了一个相当 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/

相关文章:

.net - 在 Silverlight 和 ASP.NET 之间混合应用程序模块

asp.net - 在 azure 存储中插入 IgnoreResourceNotFoundException 的位置

c# - ASP.Net MVC3 : UrlHelper Extension method requires argument

dependency-injection - 使用 Ninject、MVC 3 和使用服务定位器模式的依赖注入(inject)

asp.net - 摆脱使用序列化类中的 DataContract 创建的 XML 中的 d2p1

c# - 在 HTML 选择控件 (.NET/C#) 中的列表项上设置自定义属性

asp.net - 将 DTO 与 OData 和 Web API 结合使用

asp.net-mvc - 如何在验证集合中添加验证错误asp.net mvc?

c# - 使用 Microsoft Translator API 用 C# 翻译整个网页

c# - Entity Framework 4.1。更新多对多关系。这是正确的方法吗?