Add方法有效,Delete/remove不支持C#restapi

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

无法使我的删除方法正常工作。 我正在尝试获取它,以便可以使用邮递员从订单中删除项目。 添加效果很好,删除效果不好。我一直试图用谷歌搜索解决方案,但总是发现错误的东西。我需要确保根据行号和订单ID删除项目,这样我就不会在所有订单中删除相同的行号

下面是我的add方法,后面是我当前的remove方法。我有一种感觉,这可能是我还没有学会的东西,通常是显而易见的

           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;