0

我正在尝试使用 PayPal IPN 方法。所以我想既然我在做 asp.net mvc 我可以像这样在我的控制器中创建一个方法视图

public void IPN()
{
  // IPN code
}

所以我在本地主机上尝试了这一切,制作了我自己的表单来发布一些 IPN 变量内容,并且效果很好。我将它上传到我的服务器并使用了 paypal 的 IPN 模拟器,它一直返回服务器 500 错误。

所以我把所有的代码都拿出来了,基本上你在我的控制器中看到了一个空方法。所以我再次尝试了模拟器,但它再次失败并出现服务器 500 错误。

所以我去实际输入了我的 url 到那个控制器方法,我得到了这个堆栈跟踪。

[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 行(因为它不存在)还是什么。

谢谢

4

2 回答 2

2

右边的那些数字是编译代码的偏移量,所以它们不会指向任何源代码行号。

在这种情况下,我要做的是将某种日志记录到代码中,这样我就可以知道在代码中的哪个位置引发了异常。根据您对将代码上传到的服务器的访问权限,您可能能够创建日志文件或事件日志等,并使用 Trace 语句:

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

Dim o As New Object

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

Call PayPal.GetAccountNumber()

这样做可以帮助您发现代码中发生故障的位置。

于 2009-10-19T20:57:41.923 回答
0

如果没有看到代码,我们无法确定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()

只要确保你没有在任何对象上调用任何方法、属性,而不是确保它们不为空。

于 2009-10-20T01:08:50.537 回答