2

我最近想要一个特殊的路由规则:{*whatever}/details/{Id}/{itemName}

我知道一旦我运行应用程序就会抛出异常。在我的应用程序中,例如我的 url 模式是 www.domain.com/root/parent/child/.../child/details/30/itemname

但目前的路由不支持这一点。如何自定义路由处理程序以使其工作?

4

3 回答 3

2

已经编写了一个支持这个的类

我已经编写了这样一个类,它可以处理 URL 中任何地方的包罗万象的段。它有相当多的代码,但它按预期工作,我已经在一个真实的项目中使用它。

自己检查一下,看看它是否满足您的需求。

于 2011-01-12T11:35:11.717 回答
1

问题是......它如何知道何时停止?

{*whatever} 段将匹配:

/foo/
/foo/bar
/foo/bar/details/4/moreFoo
/foo/bar/andmore/details/4/moreFoo

因为 catch-all 参数包含任何内容,所以它永远不会停止。

实现这一点的唯一方法是为您使用细节的每个地方创建不同的路线......

例如:

games/details/{id}/{itemName}
widgets/details/{id}/{itemName}
books/details/{id}/{itemName}

当然,这已经在默认的 {controller}/{action}/{id} 路由中提供了

于 2009-06-05T21:53:59.883 回答
1

我想你可能想看看扩展 System.Web.Routing.RouteBase 类并覆盖 GetRouteData() 方法。有了它,您可以查看请求的 url 并确定是否与您的模式匹配,如果匹配,则构造并返回一个新的 RouteData 实例,该实例指向您要处理请求的控制器和操作。否则,如果您与请求的 url 不匹配,则返回 null。

有关示例,请参见以下内容:

史蒂夫·桑德森的 Pro ASP.NET MVC 框架

自定义路由库

于 2009-06-06T21:18:37.310 回答