Получаю ошибку трассировки и не понимаю, почему
-
22-09-2019 - |
Вопрос
Я пытаюсь использовать метод PayPal IPN.Итак, я подумал, что, поскольку я делаю asp.net mvc, я могу просто создать представление метода в своем контроллере следующим образом.
public void IPN()
{
// IPN code
}
Итак, я попробовал все это на локальном хосте, создал свою собственную форму для публикации некоторых переменных IPN, и все работало нормально.Я загрузил его на свой сервер и использовал симулятор IPN от PayPal, и он продолжал возвращать ошибку сервера 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 (поскольку она не существует) или к чему-то еще.
Спасибо
Решение
Числа справа представляют собой смещения в скомпилированном коде, поэтому они не будут указывать на номера строк исходного кода.
В этом сценарии я бы включил в код какую-то регистрацию, чтобы знать, где в коде возникает исключение.В зависимости от того, какой у вас доступ к серверу, на который вы загрузили код, вы можете создать файл журнала, журнал событий и т. д. и использовать операторы трассировки:
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()
Просто убедитесь, что вы не вызываете какие-либо методы и свойства какого-либо объекта, не проверив, что они не равны нулю.