Как правильно использовать PUT для обновления чего-либо? - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь выучить формы ксамарина. У меня есть существующая база данных, к которой я хотел получить доступ из приложения. Здесь я хочу что-то обновить, используя web api / REST, я следовал этому руководству по использованию REST. К сожалению, это не работает, и я даже не знаю почему. Как правильно использовать PUT для обновления чего-либо и что здесь не так?

Класс веб-API:

class GuestAcc
{
    public string RefCode { get; set; }
    public double Price { get; set; }
}

Xamarin Модель:

public class GuestAcc
{
    public string RefCode { get; set; }
    public double Price { get; set; }
}

GuestAccountsController:

[ResponseType(typeof(void))]
    public async Task<IHttpActionResult> UpdateBalance(GuestAcc guestAcc)
    {
        var guestAccounts = db.GuestAccounts.First(x => x.ReferenceCode == guestAcc.RefCode);
        guestAccounts.Balance = guestAccounts.Balance - guestAcc.Price;
        db.Entry(guestAccounts).State = EntityState.Modified;
        await db.SaveChangesAsync();
        return StatusCode(HttpStatusCode.NoContent);
    }

Форма Xamarin:

 private async void btn_proceed_clicked(object sender, EventArgs e)
 {
            GuestAcc guestAcc = new GuestAcc();
            guestAcc.Price = 125;
            guestAcc.RefCode = "user123";
            var guestAccountURL = "http://192.168.8.100:56750/api/UpdateBalance/";
            var uri_guestAccount = new Uri(string.Format(guestAccountURL, string.Empty));
            var json = JsonConvert.SerializeObject(guestAcc);
            var content = new StringContent(json, Encoding.UTF8, "application/json");
            HttpResponseMessage response = null;

            response = await client.PutAsync(uri_guestAccount, content);
            if (response.IsSuccessStatusCode)
            {
                await DisplayAlert("Notice", "Success", "Ok");
            }
 }

1 Ответ

0 голосов
/ 06 сентября 2018

Вам необходимо использовать правильный HTTP-глагол либо в имени действия, либо в качестве атрибута метода. как

[ResponseType(typeof(void))]
[HttpPut]
public async Task<IHttpActionResult> UpdateBalance(GuestAcc guestAcc)
{
    var guestAccounts = db.GuestAccounts.First(x => x.ReferenceCode == guestAcc.RefCode);
    guestAccounts.Balance = guestAccounts.Balance - guestAcc.Price;
    db.Entry(guestAccounts).State = EntityState.Modified;
    await db.SaveChangesAsync();
    return StatusCode(HttpStatusCode.NoContent);
}

или в названии как

[ResponseType(typeof(void))]    
public async Task<IHttpActionResult> PutBalanceAsync(GuestAcc guestAcc)
{
    var guestAccounts = db.GuestAccounts.First(x => x.ReferenceCode == guestAcc.RefCode);
    guestAccounts.Balance = guestAccounts.Balance - guestAcc.Price;
    db.Entry(guestAccounts).State = EntityState.Modified;
    await db.SaveChangesAsync();
    return StatusCode(HttpStatusCode.NoContent);
}
...