2

私のマシンでは StructureMap が正常に動作しています。すべてがうまく機能します...存在しないリソースをリクエストするまで。404 の代わりに 500 エラーが発生します。

例えば。http://localhost:6969/lkfhklsfhskdfksdf

ネットをチェックしたところ、構造マップコントローラークラスを修正するように言われました。それと喜びをしました!-元のデフォルトの 404 イエロー スクリーン ページ- が表示されます。わかりました、それは私の 500 エラー ページよりも優れています。

しかし、カスタム 404 ページに移動したい :( 正当なコントローラーで悪いアクションを呼び出すと、カスタム 404 ページが表示されます。

私のglobal.asaxには、カスタムルート、デフォルト、最後に404ルートがあります。

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Post", action = "Index", id = "" } // Parameter defaults
    );

// Invalid/Unknown route.
routes.MapRoute(
    "404-ResourceNotFound",
    "{*url}",
    new { controller = "StaticContent", action = "ResourceNotFound" }
    );

これが私の構造マップコントローラーコードです:

public class StructureMapControllerFactory: DefaultControllerFactory {
    protected override IController GetControllerInstance(Type controllerType) {
        if (controllerType != null) {
            return ObjectFactory.GetInstance(controllerType) as Controller;
        return base.GetControllerInstance(controllerType);
    }
}

何か案は?どうにかしてストラクチャ マップ コントローラ ファクトリをglobal.asaxルート リストにバブルバックさせる方法はありますか? または、何か本当に悪いことをしたので、他のものを修正する必要があります。

乾杯!

4

1 に答える 1

2

うーん...それは例外的なことかもしれません。MVC が例外を介して 404 エラーを処理するように設計されている方法と同様です。

ここに私のコードがあります:

public class StructureMapControllerFactory : DefaultControllerFactory
{
    protected override IController GetControllerInstance(Type controllerType)
    {
        IController result = null;
        try
        {
            result = ObjectFactory.GetInstance(controllerType) as Controller;
        }
        catch (StructureMapException)
        {
            System.Diagnostics.Debug.WriteLine(ObjectFactory.WhatDoIHave());
            throw;
        }

        return result;
    }
}

..これを持っていて変更したことさえあるかもしれません。そうでない場合は、試してみて、違いがあるかどうかを確認してください。あるとは思えません。

おそらく、そのオーバーライドに侵入して、スローされている例外を確認してみてください。

(補足: クロームさん、あなたの質問に何度も出くわすのは奇妙です。何をしているのですか?)

編集:服装リクエストを試してみましたが、同じ例外が発生しました。だから私はあなたのようにクラスを更新しました。

私の新しいクラス:

public class StructureMapControllerFactory : DefaultControllerFactory
{
    protected override IController GetControllerInstance(Type controllerType)
    {
        if (controllerType == null)
            return base.GetControllerInstance(controllerType);

        IController result = null;
        try
        {
            result = ObjectFactory.GetInstance(controllerType) as Controller;
        }
        catch (StructureMapException)
        {
            System.Diagnostics.Debug.WriteLine(ObjectFactory.WhatDoIHave());
            throw;
        }

        return result;
    }
}

..これにより、404が返されるようです..しかし、開発中のカスタムエラーページを(ローカルで)取得することはありません..それらを取得する前に公開するまで待つ必要があります。dev でカスタム エラー ページを表示することに慣れていますか?

于 2009-06-01T05:25:49.913 に答える