xamarin表单-HttpClient post请求postAsync不工作

xamarin表单-HttpClient post请求postAsync不工作,post,xamarin.forms,httpclient,Post,Xamarin.forms,Httpclient,我正在尝试从HttpClient发布数据,但它不起作用 我收到如下错误消息: public void RefreshDataAsync(Persons selectedData) { using (var client = new HttpClient()) { var persons = new StringContent(JsonConvert.SerializeObjec

我正在尝试从HttpClient发布数据,但它不起作用

我收到如下错误消息:

public void RefreshDataAsync(Persons selectedData)
        {
                using (var client = new HttpClient())
                {
                    var persons = new StringContent(JsonConvert.SerializeObject(selectedData), Encoding.UTF8, "application/json");
                    var httpResponseMessage = client.PostAsync("http://169.254.80.80:62510/api/Person/SavePerson", persons).Result;
                    if (httpResponseMessage.IsSuccessStatusCode)
                    {
                        var responceString = httpResponseMessage.Content.ReadAsStringAsync().Result;
                    }
                }
        }
        [HttpPost]
        public int SavePerson([FromBody]string persons)
        {

            JavaScriptSerializer js = new JavaScriptSerializer();
            var aa = JsonConvert.DeserializeObject<Persons>(persons);
            int Success = 0;
            using (SqlConnection con = new SqlConnection(ConnectionString))
            {
                using (var cmd = new SqlCommand("SavePerson", con))
                {
                    cmd.CommandType = CommandType.StoredProcedure;

                    cmd.Parameters.Add(new SqlParameter("@Name", SqlDbType.NVarChar, 100)).Value = aa.Name;
                    cmd.Parameters.Add(new SqlParameter("@Age", SqlDbType.Int)).Value = aa.Age;
                    var parm1 = new SqlParameter("@Success", SqlDbType.VarChar, 500);
                    parm1.Size = 500;
                    parm1.Direction = ParameterDirection.Output;
                    cmd.Parameters.Add(parm1);
                    cmd.Connection.Open();
                    object retValue = cmd.ExecuteNonQuery();

                    if (cmd.Parameters["@Success"].Value != DBNull.Value)
                        Success = Convert.ToInt32(cmd.Parameters["@Success"].Value);

                    cmd.Connection.Close();
                    return Success;
                }
            }
        }
{状态代码:500,原因短语:“内部服务器错误”,版本:1.1,内容:System.Net.Http.StreamContent,标题: { 缓存控制:没有缓存 Pragma:没有缓存 服务器:Microsoft IIS/10.0 X-AspNet-Version:4.0.30319 X-Powered-By:ASP.NET 日期:2017年3月30日星期四06:10:50 GMT 内容类型:application/json;字符集=utf-8 过期:-1 内容长度:36 }}

我的代码如下:

public void RefreshDataAsync(Persons selectedData)
        {
                using (var client = new HttpClient())
                {
                    var persons = new StringContent(JsonConvert.SerializeObject(selectedData), Encoding.UTF8, "application/json");
                    var httpResponseMessage = client.PostAsync("http://169.254.80.80:62510/api/Person/SavePerson", persons).Result;
                    if (httpResponseMessage.IsSuccessStatusCode)
                    {
                        var responceString = httpResponseMessage.Content.ReadAsStringAsync().Result;
                    }
                }
        }
        [HttpPost]
        public int SavePerson([FromBody]string persons)
        {

            JavaScriptSerializer js = new JavaScriptSerializer();
            var aa = JsonConvert.DeserializeObject<Persons>(persons);
            int Success = 0;
            using (SqlConnection con = new SqlConnection(ConnectionString))
            {
                using (var cmd = new SqlCommand("SavePerson", con))
                {
                    cmd.CommandType = CommandType.StoredProcedure;

                    cmd.Parameters.Add(new SqlParameter("@Name", SqlDbType.NVarChar, 100)).Value = aa.Name;
                    cmd.Parameters.Add(new SqlParameter("@Age", SqlDbType.Int)).Value = aa.Age;
                    var parm1 = new SqlParameter("@Success", SqlDbType.VarChar, 500);
                    parm1.Size = 500;
                    parm1.Direction = ParameterDirection.Output;
                    cmd.Parameters.Add(parm1);
                    cmd.Connection.Open();
                    object retValue = cmd.ExecuteNonQuery();

                    if (cmd.Parameters["@Success"].Value != DBNull.Value)
                        Success = Convert.ToInt32(cmd.Parameters["@Success"].Value);

                    cmd.Connection.Close();
                    return Success;
                }
            }
        }
获取数据的方法如下:

public void RefreshDataAsync(Persons selectedData)
        {
                using (var client = new HttpClient())
                {
                    var persons = new StringContent(JsonConvert.SerializeObject(selectedData), Encoding.UTF8, "application/json");
                    var httpResponseMessage = client.PostAsync("http://169.254.80.80:62510/api/Person/SavePerson", persons).Result;
                    if (httpResponseMessage.IsSuccessStatusCode)
                    {
                        var responceString = httpResponseMessage.Content.ReadAsStringAsync().Result;
                    }
                }
        }
        [HttpPost]
        public int SavePerson([FromBody]string persons)
        {

            JavaScriptSerializer js = new JavaScriptSerializer();
            var aa = JsonConvert.DeserializeObject<Persons>(persons);
            int Success = 0;
            using (SqlConnection con = new SqlConnection(ConnectionString))
            {
                using (var cmd = new SqlCommand("SavePerson", con))
                {
                    cmd.CommandType = CommandType.StoredProcedure;

                    cmd.Parameters.Add(new SqlParameter("@Name", SqlDbType.NVarChar, 100)).Value = aa.Name;
                    cmd.Parameters.Add(new SqlParameter("@Age", SqlDbType.Int)).Value = aa.Age;
                    var parm1 = new SqlParameter("@Success", SqlDbType.VarChar, 500);
                    parm1.Size = 500;
                    parm1.Direction = ParameterDirection.Output;
                    cmd.Parameters.Add(parm1);
                    cmd.Connection.Open();
                    object retValue = cmd.ExecuteNonQuery();

                    if (cmd.Parameters["@Success"].Value != DBNull.Value)
                        Success = Convert.ToInt32(cmd.Parameters["@Success"].Value);

                    cmd.Connection.Close();
                    return Success;
                }
            }
        }
[HttpPost]
public int SavePerson([FromBody]字符串persons)
{
JavaScriptSerializer js=新的JavaScriptSerializer();
var aa=JsonConvert.DeserializeObject(个人);
int成功=0;
使用(SqlConnection con=newsqlconnection(ConnectionString))
{
使用(var cmd=new SqlCommand(“SavePerson”,con))
{
cmd.CommandType=CommandType.storedProcess;
cmd.Parameters.Add(新的SqlParameter(“@Name”,SqlDbType.NVarChar,100)).Value=aa.Name;
cmd.Parameters.Add(新的SqlParameter(“@Age”,SqlDbType.Int)).Value=aa.Age;
var parm1=新的SqlParameter(“@Success”,SqlDbType.VarChar,500);
parm1.尺寸=500;
parm1.Direction=参数Direction.Output;
cmd.Parameters.Add(parm1);
cmd.Connection.Open();
object retValue=cmd.ExecuteNonQuery();
if(cmd.Parameters[“@Success”].Value!=DBNull.Value)
Success=Convert.ToInt32(cmd.Parameters[“@Success”].Value);
cmd.Connection.Close();
回归成功;
}
}
}

我尝试使用“HttpRequester”工具运行,以使其正常工作。我得到了json字符串的响应。但当我从emulator调用此方法时,它不起作用。

内部服务器错误(500)基本上就是这样,服务器出了问题。如果您说请求是从另一个工具发出的,那么服务器错误可能是由格式错误的数据引起的。因此,这里基本上有两种选择:使用Fiddler之类的工具检查应用程序中的请求,或者检查服务器端日志,看看哪里出了问题。根据您提供的信息,很难判断出什么是错误的,这只是猜测。@GeraldVersluis,我正在发布emulator的请求。我认为fiddler并没有显示来自emulator的请求。因为我的请求呼叫未显示在其中。如果设置正确,它将显示请求。不管怎样,你可以扭转局面。对连接到调试器的服务器运行模拟器,并在服务器中设置断点,以查看传入的数据和发生的情况。