Add方法有效,Delete/remove不支持C#restapi
无法使我的删除方法正常工作。 我正在尝试获取它,以便可以使用邮递员从订单中删除项目。 添加效果很好,删除效果不好。我一直试图用谷歌搜索解决方案,但总是发现错误的东西。我需要确保根据行号和订单ID删除项目,这样我就不会在所有订单中删除相同的行号 下面是我的add方法,后面是我当前的remove方法。我有一种感觉,这可能是我还没有学会的东西,通常是显而易见的Add方法有效,Delete/remove不支持C#restapi,c#,.net,json,rest,firebase-realtime-database,C#,.net,Json,Rest,Firebase Realtime Database,无法使我的删除方法正常工作。 我正在尝试获取它,以便可以使用邮递员从订单中删除项目。 添加效果很好,删除效果不好。我一直试图用谷歌搜索解决方案,但总是发现错误的东西。我需要确保根据行号和订单ID删除项目,这样我就不会在所有订单中删除相同的行号 下面是我的add方法,后面是我当前的remove方法。我有一种感觉,这可能是我还没有学会的东西,通常是显而易见的 public async Task<short> AddAsync(int orderID, OrderIt
public async Task<short> AddAsync(int orderID, OrderItemDTO item)
{
if (item.LineNumber != 0)
{
throw new ValidationException("LineNumber is generated and cannot be specified");
}
short lineNumber = (short)(_db.OrderItems.Where(oi => oi.OrderID == orderID).Max(oi => oi.LineNumber) + 1);
_db.OrderItems.Add(new OrderItem()
{
Quantity = item.Quantity,
OrderID = orderID,
LineNumber = lineNumber,
Price = item.Price,
ProductID = item.ProductID,
StudentPersonID = item.StudentPersonID
});
await _db.SaveChangesAsync();
return lineNumber;
}
public async Task<short> RemoveAsync(int orderID, OrderItemDTO item)
{
if (item.LineNumber != 0)
{
throw new ValidationException("LineNumber is generated and cannot be specified");
}
short lineNumber = (short)(_db.OrderItems.Where(oi => oi.OrderID == orderID).Max(oi => oi.LineNumber));
_db.OrderItems.Remove(new OrderItem()
{
OrderID = orderID,
LineNumber = lineNumber,
});
await _db.SaveChangesAsync();
return lineNumber;
}
public async Task AddAsync(int-orderID,OrderItemDTO-item)
{
如果(item.LineNumber!=0)
{
抛出新的ValidationException(“已生成行号,无法指定”);
}
short lineNumber=(short)(_db.OrderItems.Where(oi=>oi.OrderID==OrderID).Max(oi=>oi.lineNumber)+1);
_db.OrderItems.Add(新的OrderItem()
{
数量=项目。数量,
OrderID=OrderID,
LineNumber=行号,
价格=项目。价格,
ProductID=item.ProductID,
StudentPersonID=item.StudentPersonID
});
等待_db.SaveChangesAsync();
返回行号;
}
公共异步任务RemoveAsync(int-orderID,OrderItemDTO-item)
{
如果(item.LineNumber!=0)
{
抛出新的ValidationException(“已生成行号,无法指定”);
}
short lineNumber=(short)(_db.OrderItems.Where(oi=>oi.OrderID==OrderID).Max(oi=>oi.lineNumber));
_db.OrderItems.Remove(新的OrderItem()
{
OrderID=OrderID,
行号=行号,
});
等待_db.SaveChangesAsync();
返回行号;
}
在我看来,您缺少方法上方的[HttpPost]
和[HttpDelete]
请参阅参考资料
与此相反,首先,您需要获取要从实体中移除的对象。然后传递那个物体。它可以在一行内完成,但为了清晰起见,我将在两行内完成
short lineNumber = (short)(_db.OrderItems.Where(oi => oi.OrderID == orderID).Max(oi => oi.LineNumber));
// this will get the object to delete due to your criteria
var objToDelete = _db.OrderItems.Where(oi => oi.OrderID == orderID && oi.LineNumber == lineNumber );
_db.OrderItems.Remove(objToDelete);
await _db.SaveChangesAsync();
return lineNumber;
我不正确地从数据库中删除了它,然后在它被删除后再次尝试删除它。在从输入中创建对象后,更改代码以将其删除。添加效果很好,我使用了Postman,它在订单中添加了一个项目,很好,我不相信会是这样,我已经看到了参考页。其他地方可能也有错误,或者我正在错误地编写删除。从删除方法返回的错误或结果是什么?我在visual studio中没有收到任何错误,我在Postman上收到一个错误,当我为订单3第4行“ExceptionMessage”运行删除时:“已生成行号,无法指定”,“ExceptionType”:“System.ComponentModel.DataAnnotations.ValidationException,您发布的更新不起作用,因为LineNumber从未在delete方法中进行过。我正在调试一个别人制作的应用程序,它使用SQL数据库来存储信息。我想,如果我执行与add函数相反的操作,我应该能够从订单中删除项目。@dsantrat“我在visual studio中没有收到任何错误”-您是否将调试器设置为引发异常?问题是,您没有列出您看到的内容,如果有错误,您会收到什么错误?你的动作打得好吗?
public async Task<short> RemoveAsync(int orderID, OrderItemDTO item)
{
if (item.LineNumber != 0)
{
throw new ValidationException("LineNumber is generated and cannot be specified");
}
var objToDelete = _db.OrderItems.Where(oi => oi.OrderID == orderID && oi.LineNumber == item.LineNumber);
_db.OrderItems.Remove(objToDelete);
await _db.SaveChangesAsync();
return xxx ; //replace what you want to return
}
_db.OrderItems.Remove(new OrderItem()
{
OrderID = orderID,
LineNumber = lineNumber
});
short lineNumber = (short)(_db.OrderItems.Where(oi => oi.OrderID == orderID).Max(oi => oi.LineNumber));
// this will get the object to delete due to your criteria
var objToDelete = _db.OrderItems.Where(oi => oi.OrderID == orderID && oi.LineNumber == lineNumber );
_db.OrderItems.Remove(objToDelete);
await _db.SaveChangesAsync();
return lineNumber;