C# DeleteAsync和PostAsync不工作
我编写了这个工作PutAsync,它允许我更新数据库中的项目:C# DeleteAsync和PostAsync不工作,c#,mvvm,async-await,mvvm-light,C#,Mvvm,Async Await,Mvvm Light,我编写了这个工作PutAsync,它允许我更新数据库中的项目: private async void Edit() { using (HttpClient client = new HttpClient()) { Item i = new Item(); i.ID = SelectedItem.ID; i.Name = SelectedItem.Name; i.Cost = SelectedItem.Cost;
private async void Edit()
{
using (HttpClient client = new HttpClient())
{
Item i = new Item();
i.ID = SelectedItem.ID;
i.Name = SelectedItem.Name;
i.Cost = SelectedItem.Cost;
string json = JsonConvert.SerializeObject(i);
HttpResponseMessage response = await client.PutAsync("http://localhost:5065/api/item", new StringContent(json, Encoding.UTF8, "application/json"));
if (response.IsSuccessStatusCode)
{
string jsonresponse = await response.Content.ReadAsStringAsync();
int result = JsonConvert.DeserializeObject<int>(jsonresponse);
if (result == 2)
{
GetItems();
}
}
}
}
我做错了什么?我怎样才能使我的帖子和删除都起作用
编辑:
下面是Delete void的一些服务器端代码,非常基本:
public static int DeleteItem(int id)
{
int rowsaffected = 0;
DbTransaction trans = null;
try
{
trans = Database.BeginTransaction("ConnectionString");
string sql = "DELETE FROM Item WHERE ID=@ID";
DbParameter par1 = Database.AddParameter("ConnectionString", "@ID", id);
rowsaffected += Database.ModifyData(trans, sql, par1);
trans.Commit();
}
catch (Exception ex)
{
if (trans != null)
trans.Rollback();
}
finally
{
if (trans != null)
Database.ReleaseConnection(trans.Connection);
}
return rowsaffected;
}
我称之为:
// DELETE: api/Item/5
public void Delete(int id)
{
ItemDataAccess.DeleteItem(id);
}
编辑:
也许在下一行有一些额外的信息
int result = JsonConvert.DeserializeObject<int>(jsonresponse);
您的呼叫成功,204是一个成功代码,它告诉客户机不要期望身体中有任何数据。您没有从消息中返回任何内容,因此服务器会自动填写204,以便在Controller方法上键入
void
。您需要显示如何调用这些方法async void
方法只能在非常特定的情况下使用(例如,事件处理程序)。如果您通过PostMan
或其他REST客户端向服务器发送删除,该方法是否有效?换句话说,你确定你的服务器处理的请求正确吗?你的服务器端代码是什么?当你调试你的服务器时,你实际上是在输入你的代码,还是在管道的早期失败了。@SteveMitcham我正在输入代码,然后我得到一个204,没有任何变化我不知道是不是这样,我已尝试将其设置为public int Delete(int id){return ItemDataAccess.deleteim(id);}
但它仍然没有改变我数据库中的任何内容,我仍然得到204 No Content响应,但如果要返回值,请检查这个问题,它可能最终会重复:
public static int DeleteItem(int id)
{
int rowsaffected = 0;
DbTransaction trans = null;
try
{
trans = Database.BeginTransaction("ConnectionString");
string sql = "DELETE FROM Item WHERE ID=@ID";
DbParameter par1 = Database.AddParameter("ConnectionString", "@ID", id);
rowsaffected += Database.ModifyData(trans, sql, par1);
trans.Commit();
}
catch (Exception ex)
{
if (trans != null)
trans.Rollback();
}
finally
{
if (trans != null)
Database.ReleaseConnection(trans.Connection);
}
return rowsaffected;
}
// DELETE: api/Item/5
public void Delete(int id)
{
ItemDataAccess.DeleteItem(id);
}
int result = JsonConvert.DeserializeObject<int>(jsonresponse);
A first chance exception of type 'Newtonsoft.Json.JsonSerializationException' occurred in Newtonsoft.Json.dll
Additional information: No JSON content found and type 'System.Int32' is not nullable. Path '', line 0, position 0.