オプションの「id」パラメータを持つページルートがあります。そのように定義されます:
routes.MapPageRoute(null,
"projects/{operation}/{id}",
"~/Projects/ProjectWizard.aspx",
true,
new RouteValueDictionary(new
{
operation = "new",
id = UrlParameter.Optional
}),
new RouteValueDictionary(new
{
operation = @"new|edit",
id = @"\d*"
})
);
ルートは正常に機能しますが、オプションの「id」パラメーターを含めていない場合にページにアクセスすると、整数に変換しようとするとコードが失敗します。
var operation = RouteData.Values["operation"].ToString();
var projectId = RouteData.Values.ContainsKey("id") ? Convert.ToInt32(RouteData.Values["id"]) : 0;
これは、次のようなルートでIDを渡す限り、うまく機能します。
http://webapp/projects/edit/123
projectId
本来あるべき123に等しい。ただし、IDを含めない場合:
http://webapp/projects/new
ルートは正常にページに移動しますが、次のエラーが発生します。
タイプ「System.Web.Mvc.UrlParameter」のオブジェクトをタイプ「System.IConvertible」にキャストできません。
ルートデータ値でキーを見つけてからゼロを割り当てるprojectId
ことはできないはずですが、そうではありません。「id」ルート値のnullをチェックするさまざまな方法を試し続けていますが、あまり気に入らないようです。