我正在为 Web 框架创建一个 Url 路由器。尽量让用户友好地使用。API 看起来像:
Route[] Routes = {
new Route(@"/user:(?<id>\d+)", "UserController.View")
};
它将与该正则表达式匹配的任何 Url 路由到该方法的位置,这可能看起来像这样:
public class UserController : Controller
{
public void View(int id)
{
// code here
}
}
它自动处理类型转换。
该方法采用的参数和参数之间存在相关性(?<id>...)
。该View()
函数必须接受名称捕获提供的所有参数。但是,它可以接受更多参数,只要它们是可选的。例如,该正则表达式也将匹配 function View(int id, int extraArg=2)
,因为我们并不真正需要extraArg
调用该函数。
问题是,该路由是否也应该与函数匹配View()
——没有参数?id
捕获很容易被丢弃,我们仍然可以很好地调用该函数。还是应该抛出异常(就像现在一样)?