我试图做的贝宝IPN法。所以我想,因为我在做asp.net的MVC我只是做一个方法观在我的控制器这样

public void IPN()
{
  // IPN code
}

所以,我想这一切都在本地主机做了我自己的表来发表一些IPN变量的东西,它工作得很好。我上传到我的服务器,并从贝宝使用的IPN模拟器和它保持返回一个服务器500错误。

所以我把所有的代码了,基本上有你所看到的在我的控制器大约只是一个空洞的方法。于是,我又试了一次德模拟器,它与服务器的500错误再次失败。

于是我就和我的网址给控制器的方法实际键入和我得到这个堆栈跟踪。

[NullReferenceException: Object reference not set to an instance of an object.]
   site.com.Controllers.MyTestController.IPN() in MyTestController:2320
   lambda_method(ExecutionScope , ControllerBase , Object[] ) +39
   System.Web.Mvc.<>c__DisplayClass1.<WrapVoidAction>b__0(ControllerBase controller, Object[] parameters) +17
   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +178
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +24
   System.Web.Mvc.<>c__DisplayClassa.<InvokeActionMethodWithFilters>b__7() +53
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +258
   System.Web.Mvc.<>c__DisplayClassc.<InvokeActionMethodWithFilters>b__9() +20
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +193
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +382
   System.Web.Mvc.Controller.ExecuteCore() +123
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +23
   System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +7
   System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext) +144
   System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext) +54
   System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext) +7
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

我不知道如果MyTestController:2320指的行2320(因为它不存在),或者是什么

由于

有帮助吗?

解决方案

右边这些数字的偏移到经编译的代码,所以它们将不指向任何源代码行号。

我想在这种情况下做的是把某种记录到的代码,这样我可以知道在代码中的异常。根据访问什么,你必须你上传的代码放到服务器上,您可能能够创建一个日志文件,或事件日志等,并使用跟踪语句:

Trace.WriteLine("Controllers.MyTestController.IPN(): Creating object.")

Dim o As New Object

Trace.WriteLine("Controllers.MyTestController.IPN(): Call PayPal web service.")

Call PayPal.GetAccountNumber()

这样做会帮助你发现在代码故障发生的情况。

其他提示

在没有看到代码,我们不能确定在NullReferenceException发生。

不过,有经验的设立IPN自己,我想你是最有可能引用空string对象。例如:

string foo = Request.Form["bar"];
foo.Trim();
//if the form collection doesn't contain a value for the key "bar" then it'll
//throw a NullReferenceException on foo.Trim()

只要确保你不会调用任何对象的任何方法,属性,而不确保他们不为null。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top