2009-05-31 9 views
2

私は自分のマシンで正常に動作しているStructureMapを持っています。存在しないリソースを要求するまで、すべてがうまくいく。 404の代わりに、私は500エラーを取得します。ASP.NET MVCとStructureMapに問題があります

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

ネットを確認すると、私はfix my structuremap controller classに言われました。それと喜びをしました!私は今 - 元のデフォルト404黄色の画面ページ - を取得します。それは私の500エラーページよりも優れています。私のGlobal.asaxで

しかし、私はそれは私のカスタム404ページに行きたい:(私は合法的なコントローラ上の悪い行動を呼び出した場合、私は私のカスタム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" } 
    ); 

ここに私のStructureMapコントローラコードです:デフォルトでは、最終的に404ルートは、その後?

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

すべてのアイデアは、私は何とか構造マップコントローラFAを得ることができるいくつかの方法がありますglobal.asaxルートリストに戻ってきますか?または私は本当に悪いことをして、いくつかの他のものを修正する必要があります。

乾杯!

答えて

2

mmm ...例外的なものかもしれません。 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; 
    } 
} 

は、ここに私のコードです。そうでない場合は、それを試して、違いがあるかどうかを確認してください。私はそこにあるとは思わない。

おそらく、そのオーバーライドを突破して例外がスローされているのを見てみてください。

(サイドノート:。?私はあなたの質問Kromeにつまずく保つ方法その奇妙uは取り組んで何R)

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

私の新しいクラス:

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; 
    } 
} 

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

+1

私は現時点で5つのサイトを実際に働いています:(1つを再アーチする、4つ新しいです:(あなたのコードで、私もそれを持っていました。 :// localhost:12345/sfsfkasfhasklfla(例えば、あなたのlocalhostとport、そしてコントローラと一致しないuri。)StructureMapControllerFactoryが例外をスローするのですか? –

+0

私のアプリケーションは、デフォルトではプロダクションでカスタムエラーページになります。私はその404ルートを持っていますか? –

+0

私は自分のカスタム404ページに覗き見を送ることができます –

関連する問題