2012-03-02 20 views
4

に私が持っているとUSERIDパラメータを取るアクション:?ASP.net MVCルートパラメータ例外

〜/ユーザ/ショーのuserId = 1234

すべてが提供さはuserIdがintかそうでないときを除いて正常に動作します不足している。ユーザーがエラーページにリダイレクトされ

  Message: The parameters dictionary contains a null entry for parameter 'userId' of 
    non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Show(Int32, 
System.Nullable`1[System.Boolean], System.String)' in 'S4U.Web.Mvc.Controllers.ProfileController'. An optional parameter must be a reference type, 
    a nullable type, or be declared as an optional parameter. 
     Parameter name: parameters 

..after:

は、その後、それは、この例外がスローされます。

どのようにしてアクションがヒットしないようにルートを設定し、代わりに404をスローしますか?

答えて

1

ウフクHacıoğullarıの答えに私のコメントで述べたように、パラメーターを空にすることができた場合にNULL可能タイプを持って、ルートに制約を加えることによってどちらかの検証を処理する必要があります。

前のアプローチでは、適切な制約がある場合は、ルートが選択されないことを意味します。キャッチオールルートまたはその他のエラー処理が必要です。 null可能な型については、アクション内で値があるかどうかをテストし、それに応じて動作することができます。

アクションパラメータを強い型として保持することは、目的とするパターンです。

4

以下のように文字列を使用しないでください。使用:

public ActionResult (int userId = 0) 
{ 

} 

これはベストプラクティスです。

また、行うことができます。

public ActionResult (int? userId) 
{ 
    if (userId.HasValue) 
    { 
     //... 
    } 
} 
関連する問題