繁体   English   中英

Xamarin Android将Post数据发送到WebApi

[英]Xamarin Android send Post data to WebApi

我有一个使用XamarinVisual Studio中创建的Android应用,我想将json格式的表单数据发送到用C#创建的Web Api 我尝试了很多来自网络的方法,但没有奏效。
有时我会收到500 Internal Server Error(内部服务器错误),有时会得到null。
我在WebApi中尝试的最后一个版本是:

public HttpResponseMessage Post([FromBody]string value)      
{
    if (value == null || value == "") Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Could not read subject/tutor from body");
    var user = JsonConvert.DeserializeObject<UsersModel>(value);
    dynamic json = System.Web.Helpers.Json.Decode(value);
    string newName = json.Name;
    string newSurname = json.Surname;
    string newUsername = json.Username;
    string newPassword = json.Password;

    string insertNewUser = "INSERT INTO USERS(NAME,SURNAME,USERNAME,PASSWORD) VALUES (:name,:surname,:username,:password) "; 
    using (OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["Licenta"].ConnectionString))
    {
        OracleCommand cmd = new OracleCommand(insertNewUser, conn);
        cmd.Parameters.Add("name", newName);
        cmd.Parameters.Add("surname", newSurname);
        cmd.Parameters.Add("username", newUsername);
        cmd.Parameters.Add("password", newPassword);
        cmd.ExecuteNonQuery();
    }

    return Request.CreateResponse(HttpStatusCode.OK);
}
catch(Exception ex)
{
    return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex);
}
}

我要发送到Web api的消息是

{

    "name": "Ionescu",
    "surname": "Ralu",
    "username": "ralucuta",
    "password": "1235555",
    "usertype":1
}

这是我的Xamarin Android应用代码:

public async Task<UserAccount> SaveProduct(UserAccount product)
{
    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri("http://blabla:80/test/");
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        StringContent content = new StringContent(JsonConvert.SerializeObject(product), Encoding.UTF8, "application/json");
        // HTTP POST
        HttpResponseMessage response = await client.PostAsync("api/Users/", content);
        if (response.IsSuccessStatusCode)
        {
            string data = await response.Content.ReadAsStringAsync();
            product = JsonConvert.DeserializeObject<UserAccount>(data);
        }
    }
    return product;
}

public class UserAccount
{
    public string name { get; set; }
    public string surname { get; set; }
    public string username { get; set; }
    public string password { get; set; }
    public int usertype { get; set; }
}

由于您正在传递UserAccount对象并且期望使用string因此不会调用您的rest api。 像这样更改您的Web API签名

[HttpPost]
[Route("api/Users/save")]
public HttpResponseMessage MyMethod(UserAccount userAccount)      
{
 //your api code
}

并在您的android代码中

public async Task<UserAccount> SaveProduct(UserAccount product)
{
    try { 
        using (var client = new HttpClient ()) {
            client.BaseAddress = new Uri ("http://blabla:80/test/");
            client.DefaultRequestHeaders.Accept.Clear ();
            client.DefaultRequestHeaders.Accept.Add (new MediaTypeWithQualityHeaderValue ("application/json"));
            var uri = new Uri ("http://blabla:80/test/api/Users/save");
            string serializedObject = JsonConvert.SerializeObject (product);
            HttpContent contentPost = new StringContent (serializedObject, Encoding.UTF8, "application/json");
            HttpResponseMessage response = await client.PostAsync (uri, contentPost);
            if (response.IsSuccessStatusCode) {
                var data = await response.Content.ReadAsStringAsync ();
                UserAccount product = JsonConvert.DeserializeObject<UserAccount>(data);
                return product;
            }
        }
    }
    catch (Exception) {
        return null;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM