10

わかりましたので、私はこの問題に困惑しています。この問題を解決するはずの多くのことを見てきましたが、要件を満たす解決策が得られません。

ELMAH を使用して例外をログに記録していますが、URL が無効なコントローラーまたは適切なコントローラーと無効なアクションのいずれかである場合に、この例外が発生します。

System.Web.HttpException: The controller for path '/BadController' was not found or does not implement IController.
   at System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType)
   at System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName)
   at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory)
   at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state)
   at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state)
   at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

この例外がスローされないようにしたい。カスタム エラーを使用していますが、アプリケーションがカスタム 404 エラー ページに送信するため、正常に動作します。ただし、例外は引き続きログに記録されます。

[HandleError]すべてのコントローラーを装飾する属性があります。これは可能ですか?もしそうなら、私はどんな助けにも感謝します。

リダイレクトする最終ルートを設定してみましたが、何らかの理由でそれより前のルートと一致しています。httpModuleを使用しようとしましたが、ファイルのApplication_Errorイベントでクリアしました。Global.asaxその例外を止めるものは何もありません。

助けてくれてありがとう!

4

4 に答える 4

4

コントローラーが存在するかどうかを確認する RouteConstraint を作成し (実際には、最初にすべての可能なコントローラーをスキャンしてキャッシュします。意味がわかります)、標準ルートに追加します。

そのため、不正なコントローラーにリクエストを送信すると、通常のルートでは受け付けられません。しかし、キャッチオールによって受け入れられます-> 404ルート...

于 2010-07-09T12:31:43.753 に答える
2

要求されたコントローラーが見つからない場合に、目的の機能を実行できるカスタム コントローラー ファクトリを接続します。これはほんの数行のコードであり、それほど面倒なことはありません。

独自のコントローラー ファクトリを展開するか、多くのライブラリの 1 つを開始点として使用できます。IControllerFactory を実装するクラスがあり、CreateController() 関数内にカスタム ロジックがあります。

于 2010-06-25T23:22:40.907 に答える
1

この例外をめぐる大量の掘り下げがスローされるはずだった後、おそらく私の問題を適切に中継していませんでした。この記事によると、答えは ELMAH からこれらの例外を除外することです。

デフォルトでは、ELMAH は、404 やその他の HTTP エラーを含む、未処理のすべての例外の詳細をログに記録します。エラー フィルタリングを使用して、これらのエラーやその他の種類のエラーを無視するように ELMAH に指示できます。

于 2010-09-08T18:37:56.890 に答える
0

DSO の ITCloud Contribを使用しています。その{controller}/{action}一般的なパラメーターはありません。UrlRoute各アクション メソッドの明示的な属性。メソッドのすぐ上にあるパラメーターの制約を見るのが好きです。

于 2010-06-25T23:34:38.663 に答える