Я создаю 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()
должна принимать все аргументы, предоставленные захватами имен. Тем не менее, он может принимать больше аргументов, если они являются необязательными. Например, это регулярное выражение также будет соответствовать функции View(int id, int extraArg=2)
, поскольку нам на самом деле не нужен extraArg
для вызова функции.
Вопрос в том, должен ли этот маршрут также соответствовать функции View()
- без аргументов? Захват id
можно легко отбросить, и мы все равно можем нормально вызывать функцию. Или это должно вызвать исключение (как это происходит сейчас)?