2012-05-08 7 views
0

私はMVCアプリケーションがあり、そのうちの二つがあるけれども、なぜそれが基本的に2つのスタックトレース、イムは思っていたのか...スタックトレースは、2つのスタックトレースの意味は何ですか?

[MissingMethodException: No parameterless constructor defined for this object.] 
    System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0 
    System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) +98 
    System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) +241 
    System.Activator.CreateInstance(Type type, Boolean nonPublic) +69 
    System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +67 

[InvalidOperationException: An error occurred when trying to create a controller of type 'PteDotNet.Web.Controllers.BlogController'. Make sure that the controller has a parameterless public constructor.] 
    System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +182 
    System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +80 
    System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +74 
    System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +232 
    System.Web.Mvc.<>c__DisplayClass6.<BeginProcessRequest>b__2() +49 
    System.Web.Mvc.<>c__DisplayClassb`1.<ProcessInApplicationTrust>b__a() +13 
    System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7 
    System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22 
    System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Func`1 func) +124 
    System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +98 
    System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +50 
    System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8970356 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184 

答えて

0

一つは、内部例外のスタックトレースです。

あなたが最初MissingMethodExceptionを得たようには理由

このオブジェクトのために定義されていませんパラメータのないコンストラクタで、見えます。理由

エラーで、InvalidOperationExceptionを引き起こし

型「PteDotNet.Web.Controllers.BlogController」のコントローラを作成しようとしたときに発生しました。コントローラにパラメータのないパブリックコンストラクタがあることを確認します。

明らかに、BlogControllerにはパラメータのないコンストラクタが必要です。

0

I'am完全にわからないが、それは根本原因のようになりますので、最初のExceptin

0

InvalidOperationExceptionの、

MissingMethodExceptionが、その後InvalidOperationExceptionがトリガーされます、最初に解雇されたがスローされる例外ですMissingMethodExceptionの結果としてスローされ、この例外はInvalidOperationExceptionInnerExceptionとして含まれています。 InvalidOperationExceptionは何が間違っているのかを説明していますが、InnerExceptionを見ると、最初にどこで障害が発生したかを確認できます。

内部例外を持つ例外でToString()を評価すると、問題を理解するのに役立つネストされたすべての内部例外のスタックトレースが得られます。一般的な間違いは、診断のためにex.Message + ex.StackTraceを使用することですが、内部例外に関する情報が不足しています。この貴重な情報を非表示にしない限り、例外をログに記録するときは常にex.ToString()を使用する必要があります。 MVCフレームワークで

次のようなコードがあります:

try { 
    // Will throw MissingMethodException if there is no parameterless constructor. 
    var controller = Activator.CreateInstance(type); 
    ... 
} 
catch (MissingMethodException ex) { 
    var message = String.Format("An error occurred when trying to create a controller of type '{0}'. Make sure that the controller has a parameterless public constructor.", type); 
    throw new InvalidOperationException(message, ex); 
} 

代わりにあなたを混乱させる可能性があるMissingMethodExceptionを取得するので、あなたは素敵な説明をInvalidOperationExceptionを取得します。これは、例外処理に関するベストプラクティスの例です。

関連する問題