4

私はRobConeryによるMVCストアフロントのようにStructureマップを使用しており、AdminControllerを持っているので、それにアクセスするには次のように入力します。

website/Admin/action

ただし、コントローラー名のスペルを間違えると、以下のエラーが発生します。

例外の詳細:System.ArgumentNullException:値をnullにすることはできません。パラメータ名:キー

この行でエラーが発生します:

Controller controller = ObjectFactory.GetInstance(controllerType) as Controller;

誰かがこのエラーを処理する方法や、エラーがまったく発生しないようにして404ページに移動する方法について何かアイデアがありますか?

よろしくお願いします

4

2 に答える 2

6

問題は、予想される型名を持つコントローラーがない場合 (つまり、ユーザーが「Amdin」と入力した場合、 ControllerFactory 基本クラスは「Amdin Controller 」を探して見つけられませんが、オーバーライドされたメソッドを呼び出すことです)。その場合、controllerType 変数は null になります。したがって、引用した行の前でnullをチェックしてから(nullの場合)次のいずれかを行うことができます。

A)cfedukeが提案するようなスペル修正を実装します

または B) 単純にステータス コード 404 で HttpException をスローします (これにより、探している 404 エラーが発生する はずです)。

注: スペル修正を行う場合は、適切なコントローラーを黙ってロードするのではなく、新しい URL への Response.Redirect を実行する必要があります。これにより、アドレス バーがスペル修正を反映するように変更されます。

于 2008-11-03T06:58:59.473 に答える
1

いくつかの異なるオプションがあります (または、必要に応じて、ソリューションのために 2 つのものを組み合わせることができます)。椅子とアドレス バーの間の潜在的な問題の一部を取り除くために、新しいルーティング フレームワークを使用してC# でSoundEx ソリューションを実装し、 潜在的にいくつかのスペルミスをキャプチャして、予想される URL に再ルーティングすることができます (および/または、あなたが信じるもののルートを追加します)。よくあるつづり間違いやリクエストはあります)。ただし、これは問題を完全に解決するソリューションではないため、アプリケーションにカスタム エラー ページを実装する方法を調べる必要があります。

于 2008-11-03T03:12:05.937 に答える