1

私はルートを持っています:

        routes.MapRoute("ResetPasswordConfirm", "reset-password-confirm", new { controller = "Membership", action = "ResetPasswordConfirm" });

とコード

    public ActionResult ResetPasswordConfirm(int userid, string key)
    {
        // ...
    }

私のアプリケーションで。だから私はこのように実行されるURLを持っています:

http://localhost/reset-password-confirm?userid=1&key=bla_bla_something

誰かが行くことを決定するまで、それは絶対に大丈夫です

http://localhost/reset-password-confirm

...そして何が起こるか見てください。ASP.NETは予測可能なエラーを生成します:

パラメータディクショナリには、null許容型ではないタイプ「System.Int32」のパラメータ「userid」のnullエントリが含まれています。

これは、検索ロボットがすべての可能なURLを取得しようとすることによっても実行できます。大丈夫ですが、実際のアプリケーションの使用中に多くのエラーが発生します。私はそれを避けたいのですが、そのような種類のエラーのすべての可能なケースに対してスタブを書くことに不快感を覚えます。

それを行うためのエレガントな方法はありますか?ありがとう。

4

2 に答える 2

2

もう1つの方法は、グローバルエラーを処理することです。設定<customErrors mode="On"></customErrors>して、ビューフォルダにweb.config作成しError.cshtmlます。SharedMVC3テンプレートには、実際にはそのページが含まれています。

一方、より具体的にしたい場合は、試しAction Filtersてみてください。これは、エラーを処理するための優れた方法です。

[HandleError(View = "YourErrorView", ExceptionType=typeof(NullReferenceException))]
public ActionResult ResetPasswordConfirm(int? userid, string key)
{
      if (!userid.HasValue)
         throw new NullReferenceException();
      // ...
}
于 2012-07-03T19:51:50.113 に答える
1

パラメータにnullableを使用します。例:

public ActionResult ResetPasswordConfirm(int? userid、string key)

于 2012-07-03T19:37:15.063 に答える