Web Api Post数据始终为null xamarin

时间:2018-04-09 13:27:29

标签: c# xamarin asp.net-web-api xamarin.android

我有视觉工作室2017,系统中有以下Xamarin版本。

  

Microsoft Visual Studio Professional 2017版本15.6.1   VisualStudio.15.Release / 15.6.1 + 27428.2002 Microsoft .NET Framework   版本4.7.02556

     

Xamarin 4.9.0.749(9b0fce36d)启用Visual Studio扩展   开发Xamarin.iOS和Xamarin.Android。

     

Xamarin Designer 4.10.58(cee1369d0)启用Visual Studio扩展   Visual Studio中的Xamarin Designer工具。

     

Xamarin.Android SDK 8.2.0.15(HEAD / 22d97e153)Xamarin.Android   参考装配和MSBuild支持。

     

Xamarin.iOS和Xamarin.Mac SDK 11.8.0.20(1c6f300)Xamarin.iOS和   Xamarin.Mac参考装配和MSBuild支持。我有   用一些.net类库添加为创建简单的Xamarin android   参考

我尝试使用xamarin应用程序发布一些数据,但总是在webapi中获取null值。

c#

中的WebApi代码
java.text.ParseException: Unparseable date: "2017-04-09T11:15:39.200+03:00"

使用xamarin app调用post方法

 public class DataPostController : ApiController
    {

        [HttpPost]
        public string Post(CSVItem data)
        {

            // CSVData data = JsonConvert.DeserializeObject<CSVData>(json);
            try
            {
                string error = string.Empty;
                if (data != null)
                {


                    error += ImportService.clsGlobal.AddItem(data.SerialNumber, data);

                }
                error = string.IsNullOrEmpty(error) ? "-1" : error;
                return error;
            }
            catch (Exception ex)
            {

                return ex.Message;
            }
        }

        public string Get()
        {
            return "Hello";
        }
    }

模型类在应用程序和&amp;与webApi相同。

   CSVItem item = GetItems();
    var url = string.Format("{0}/{1}?", "http://myurl.com", "api/DataPost");
                            string sContentType = "application/json"; // or application/xml

                            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "cHRlc3Q5OnB1bXB0ZXN0OUAxMjM0NTY=");
                            var oTaskPostAsync = client.PostAsync(url, new StringContent(item.ToString(), Encoding.UTF8, sContentType));
                            var res = oTaskPostAsync.ContinueWith((oHttpResponseMessage) =>
                           {
                               Task<string> r1 = oHttpResponseMessage.Result.Content.ReadAsStringAsync();
                               var strResult = r1.Result;

                               // response of post here
                               Pt9Log.WriteLog("HistoryDownload PostCSV end. StatusCode" + oTaskPostAsync.Result.StatusCode.ToString());
                               Pt9Log.WriteLog("HistoryDownload PostCSV end. Result===" + oTaskPostAsync.Result.ToString());

                               Pt9Log.WriteLog("HistoryDownload PostCSV end. Post Response===" + strResult);

                               if (oTaskPostAsync.Result.StatusCode == System.Net.HttpStatusCode.OK)
                                   result = true;
                               else
                                   result = false;

                           });

1 个答案:

答案 0 :(得分:1)

您应该使用JsonConvert.SerializeObject()item转换为JSON,而不是使用item.ToString()
例如:

var oTaskPostAsync = client.PostAsync(url, new StringContent(JsonConvert.SerializeObject(item), Encoding.UTF8, sContentType));

您可以参考Consuming a RESTful Web Service了解更多信息。