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()
関数は、名前キャプチャによって提供されるすべての引数を受け入れる必要があります。ただし、オプションである限り、より多くの引数を受け入れることができます。たとえば、関数を呼び出すView(int id, int extraArg=2)
必要がないため、その正規表現も関数と一致します。extraArg
問題は、そのルートも関数と一致する必要があるView()
かどうかです-引数なしで?キャプチャは簡単に破棄でき、id
関数を正常に呼び出すことができます。または、(現在のように)例外をスローする必要がありますか?