2009-05-31 44 views
2

我在我的機器上已經可以正常工作了。一切都很好......直到我請求一個不存在的資源。而不是404,我得到一個500錯誤。ASP.NET MVC和StructureMap有問題

例如。我們被告知fix my structuremap controller class。做到了,歡樂!我現在得到 - 原始默認的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" } 
    ); 

這裏是我的structuremap控制器代碼:

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

任何想法是有一些方法我可以以某種方式獲取結構圖控制器發? ctory回到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; 
    } 
} 

..你甚至可能已經過這一點,並改變了它。如果不是,請嘗試一下,看看是否有區別。我不懷疑會有。

也許只是試着打破那個覆蓋,看看拋出了什麼異常。

(邊注:?五味我如何保持絆倒你的問題克羅梅ü什麼工作R)

編輯:我試過外衣請求,並得到了同樣的異常。所以我像你一樣更新了我的課程。

我的新類:

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像它應該..但我從來沒有得到開發(本地)的自定義錯誤頁..我要等到我發佈之前,我得到這些。你是否習慣在開發中看到自定義錯誤頁面?

+1

我現在實際上在5個站點工作:(重新創建一個,4個是新的。(另外,用你的代碼,我也曾經這樣做過。當你得到一個url的時候會發生什麼:http :// localhost:12345/sfsfkasfhasklfla(例如你的本地主機和端口,然後是一個與任何控制器都不匹配的uri。你的StructureMapControllerFactory是否會拋出異常? – 2009-06-02 00:35:38