是否应在全球路线之前或之后检查内联路线?

时间:2011-01-02 01:01:13

标签: c# web-frameworks api-design

我正在编写一个Web框架,一个简洁的功能(IMO)是您可以为内联函数定义Web地址,如下所示:

[Url(@"/profile:(?<username>\w+)")]
public void Profile(string username)

然后当您访问/profile:someusername时,该函数将自动被调用,someusername将被传递到函数并自动进行类型转换。

但是对于那些喜欢旧方式的人来说,你仍然可以在一个地方指定所有路线:

List<Route> Routes = new List<Route> {
    new Route(@"/user:(?<id>\d+)", "UserController.View")
};

现在我只想确定应该处理两种不同方法的顺序。

OOH,将全球航线放在首位意味着您可以在内联航线抢夺之前预先处理所有特殊情况,但OTOH,如果您将全球航线放在前面,则无法将所有后备航线放在那里。所以我无法确定哪个订单更好......

我猜的另一个解决方案是使用优先级队列,用户可以为某些路由提供更高或更低的优先级。

1 个答案:

答案 0 :(得分:2)

在我看来,更具体的路线应该是一般路线的前提,只是因为它们指定了更具体的行为。

我喜欢这个功能btw,因为它从全局定义中删除了特定路由并且没有混乱,所以你有一个更好的概述,你没有在方法中指定它们,但实际上它们在哪里使用,这有助于提高可读性。