【发布时间】:2015-05-27 13:31:05
【问题描述】:
我这样创建了一个对象:
Object {ABC-123: "XYZ", ABC-112: "LAX"}
我正在尝试将该对象发送到 .NET,但出现 500 错误,这是我发送该对象的方式:
$.ajax({
type: "POST",
url: "/vendorProject/api/connection/updateVendorItem",
data: JSON.stringify(editObject),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
alert('success');
},
failure: function (errMsg) {
alert('failed');
}
});
变量editObject就是上面的对象。我不认为这部分是问题。
我将它发送到 ASP.NET 中的这个控制器:
public List<VendorUpdateClass> updateVendorItem(string[] edittedItems)
{
ConnectionClass jobs = new ConnectionClass();
return jobs.updateVendors(edittedItems);
}
然后发送这个类:
public List<VendorUpdateClass> updateVendors(string[] items)
{
VendorUpdateCell = new List<VendorUpdateClass>();
VendorUpdateClass vendorUpdatedItem = new VendorUpdateClass();
for (int i = 0; i < items.Length; i++ ){
vendorUpdatedItem.job = items[i];
vendorUpdatedItem.task = items[i];
vendorUpdatedItem.vendor = items[i];
VendorUpdateCell.Add(vendorUpdatedItem);
}
return VendorUpdateCell;
}
现在,当我从我的类中删除循环时,这里发生了一些有趣的事情,它看起来像这样:
public List<VendorUpdateClass> updateVendors(string[] items)
{
VendorUpdateCell = new List<VendorUpdateClass>();
VendorUpdateClass vendorUpdatedItem = new VendorUpdateClass();
//for (int i = 0; i < items.Length; i++ ){
vendorUpdatedItem.job = "aaa";
vendorUpdatedItem.task = "bbb";
vendorUpdatedItem.vendor = "ccc";
VendorUpdateCell.Add(vendorUpdatedItem);
//}
return VendorUpdateCell;
}
这不会给我一个 500 错误,事实上我从 ajax 调用中获得了成功警报。所以我假设我在.NET中循环我的对象时做错了什么有人有什么建议吗?
我期待的是 vendorUpdatedItem.job 等于 ABC-123,vendorUpdatedItem.task 等于 ABC-123 和 vendorUpdatedItem.vendor 等于 XYZ(无论如何都是第一项)
还有一个问题...我无法调试我的 .NET 代码,因为我的 IIS 不工作。
但这是我从网络调用中得到的响应:
{"Message":"发生错误。","ExceptionMessage":"对象引用未设置为对象的实例。","ExceptionType":"System.NullReferenceException","StackTrace":" at VendorProject.Models.ConnectionClass.updateVendors(String[] items)\r\n at lambda_method(Closure , Object , Object[] )\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.c__DisplayClass10.b__9 (Object instance, Object[] methodParameters)\r\n 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary2 arguments, CancellationToken cancelToken)\r\n--- 堆栈跟踪从上一个位置结束,其中在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)处引发了异常 ---\r\n\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)处\r\n 在 System.Runtime .CompilerServices.TaskAwaiter1.GetResult()\r\n 在 System.Web.Http.Control lers.ApiControllerActionInvoker.d__0.MoveNext()\r\n--- 从先前引发异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\r \n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\r\n 在 System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext ()\r\n--- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n 在 System.Runtime 处从先前引发异常的位置结束堆栈跟踪。 CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\r\n 在 System.Web.Http.Controllers.AuthenticationFilterResult.d__0.MoveNext()\r\n- -- 从先前引发异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.T hrowForNonSuccess(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\r\n 在 System.Web.Http。 Dispatcher.HttpControllerDispatcher.d__1.MoveNext()"}
【问题讨论】:
-
在您的失败部分添加以下代码并尝试找出确切的错误消息: .failure(function (xhr, textStatus, errorThrown) { //errorThrown 中返回什么?});
-
虽然我不一定期望它会导致 错误,但您的初始循环代码正在更新同一个对象并在每个数组中放置对同一个对象的引用元素。在这种结构中,您确实需要为每次迭代创建一个“新的”VendorUpdateClass。