しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

アクションとオーバーロード

ASP.NET MVC ネタです。今回はアクションのオーバーロードがどのように解決されるか気になったのでちょっと調べました。例えば

public ActionResult Index()
{
    ...
}

public ActionResult Index(int id)
{
    ...
}

の時に /index にアクセスするとエラーが出ます。個人的には int は Nullable じゃ無いので Index() を呼んでもらいたいんですが、ベータではエラーになります。

次に /index/1 にアクセスすると Index(int id) が呼び出されます。ソースを呼んだわけじゃないので推測ですが、Index() が呼ばれるためには AcceptVerbs を付けて受け付ける HTTP Method を制限するしかなさそうです。

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Index()
{
    ...
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(int id)
{
    ...
}

とすれば GET の時には Index() が呼ばれます。でも Get と Post を同時に指定するとまたエラーが出ます。ちょっと残念です。