我正在尝试使用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行(因为它不存在)或者是什么。
由于
答案 0 :(得分: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()
这样做可以帮助您发现代码中发生故障的位置。
答案 1 :(得分:0)
如果没有看到代码,我们无法确定NullReferenceException
发生的位置。
但是,有了自己设置IPN的经验,我认为你很可能引用了一个null 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()
确保您没有在任何对象上调用任何方法,属性而不确保它们不为空。