【问题标题】:Android http post to ASP.NET Web API not insert dataAndroid http post 到 ASP.NET Web API 不插入数据
【发布时间】:2016-02-13 17:00:15
【问题描述】:

我正在使用安卓系统。我想将数据发布到 ASP.NET Web API。我使用以下方法尝试了http post

HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("content-type", "application/json");
httpPost.setHeader("Accept", "application/json");

// adding post params
if (params != null) {
    httpPost.setEntity(new UrlEncodedFormEntity(params));
}

Log.i("serrrrr",""+params);

httpResponse = httpClient.execute(httpPost);

我的名字值对看起来像

[attendance={"attendance_id":"0","Usr_Id":"5","Com_Id":"1","date":"12-11-2015","time_in":"04:41:41 pm","time_out":"","location_in":"my address","location_out":"","status_in":"true","status_out":"true","total_time":"","App_id":"1"}]

当我尝试将此数据发布到 web api 时,出现以下错误

{"Message":"发生错误。","ExceptionMessage":"对象引用未设置为对象的实例。","ExceptionType":"System.NullReferenceException","StackTrace":" at WebApplication.Areas.Json.Controllers.AttendancesController.PostAttendance(出勤)\r\n 在 lambda_method(Closure , Object , Object[] )\r\n 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.c__DisplayClass10 .b__9(对象实例,Object[] 方法参数)\r\n 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(对象实例,Object[] 参数)\r\n 在 System.Web.Http.Controllers .ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancelToken)\r\n--- System.Runtime.CompilerServices.TaskAwaiter 上一个引发异常的位置的堆栈跟踪结束---\r\n。 ThrowForNonSuccess(任务任务)\r\n 在 System.Runtime.CompilerServices.Ta skAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext()\r\n--- 堆栈跟踪从上一个引发异常的位置结束 ---\r \n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\r\n 在 System.Web.Http.Controllers.ActionFilterResult.d__2 .MoveNext()\r\n--- 从先前引发异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n 在 System. Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()"}

我该如何解决这个问题?发送参数有问题吗?

【问题讨论】:

  • 您是否可以访问服务器端代码,即 asp.net web api 服务?您发送参数的方式很可能存在问题,因为服务器可能需要额外的东西或不同格式的东西,但它不能正确地进行验证。不查看引发异常的服务器端代码是不可能弄清楚的

标签: java android asp.net asp.net-web-api


【解决方案1】:

你的例子

[
    attendance={
        "attendance_id":"0",
        "Usr_Id":"5",
        "Com_Id":"1",
        "date":"12-11-2015",
        "time_in":"04:41:41 pm",
        "time_out":"",
        "location_in":"my address",
        "location_out":"",
        "status_in":"true",
        "status_out":"true",
        "total_time":"",
        "App_id":"1"
    }
]

JSON 无效,因为数组中有键值对。你可以在http://jsonlint.com/查看它

因此您的输入/发布数据无法反序列化,并且服务器端代码不会进行错误处理来捕获它(并且可以选择返回有意义的错误消息)。

修正您的输入。

【讨论】:

  • 我的 json 数据是 { "attendance_id":"0", "Usr_Id":"5", "Com_Id":"1", "date":"12-11-2015", " time_in":"04:41:41 pm", "time_out":"", "location_in":"我的地址", "location_out":"", "status_in":"true", "status_out":"true" , "total_time":"", "App_id":"1" }
  • 和“出席”是我的名称值对名称
  • 然后去掉[] -s
猜你喜欢
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-18
  • 1970-01-01
  • 1970-01-01
  • 2017-12-10
  • 1970-01-01
相关资源
最近更新 更多