2012-05-08 52 views
0

我有一个MVC应用程序,它有两个基本踪迹,即时知道为什么有两个人的关系吗?..堆栈跟踪是什么意思,当他们有两个?

[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

我'不能完全肯定,但它看起来像根本原因:由于第一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。当涉及异常处理时,这是最佳实践的一个例子。

相关问题