删除方法问题 - Asp.net Web API
Posted
技术标签:
【中文标题】删除方法问题 - Asp.net Web API【英文标题】:Delete method issue - Asp.net Web API 【发布时间】:2021-07-26 19:08:25 【问题描述】:我有一个工作正常的 POST 方法 它需要一个对象列表并使用 Entity Framework AddRange 将其添加到数据库中
我尝试使用 DELETE 方法应用相同的逻辑(获取对象列表并使用 RemoveRange 从数据库中删除它)它确实返回 200 OK 但不会从数据库中删除
发布
[HttpPost]
public HttpResponseMessage Post(List<Provider_status> rows)
try
using (DbModel dbModel = new DbModel())
dbModel.Provider_status.AddRange(rows);
dbModel.SaveChanges();
catch
return new HttpResponseMessage()
Content = new StringContent("Records Added")
;
删除方法
[HttpDelete]
public HttpResponseMessage Delete(List<Provider_status> rows)
try
using (DbModel dbModel = new DbModel())
dbModel.Provider_status.RemoveRange(rows);
dbModel.SaveChanges();
catch
return new HttpResponseMessage()
Content = new StringContent("Records Deleted")
;
【问题讨论】:
“不工作”不是一个足够详细的问题陈述,无法回答。 更新为:确实返回 200 OK 但不会从数据库中删除 您是否缺少操作中的[HttpDelete]
属性?
我添加了 HttpDelete
但结果相同
您正在捕获并忽略任何错误(异常),您会错过系统告诉您的重要信息吗?
【参考方案1】:
试试这个
foreach ( var row in rows)
var exRow= dbModel.Provider_status.FirstOrDefault(i=> i.Id==row.Id);
if( exRow!=null) dbModel.Provider_status.Remove(exRow);
dbModel.SaveChanges();
恕我直言,从操作中删除 [HttpDelete]
【讨论】:
我得到 2 个错误 1) 无法将类型 'long' 隐式转换为 'bool' 2) 无法将 lambda 表达式转换为预期的委托类型,因为块中的某些返回类型不能隐式转换为委托返回类型 这是一个错字。你必须使用 == 而不是 =【参考方案2】:一个可能的原因是
dbModel.Provider_status.RemoveRange(rows);
正在使用 reference equality 比较 rows
和 Provider_status
并考虑到由于没有匹配项,因此不应删除任何内容。
【讨论】:
知道如何解决这个问题以便能够从数据库中删除以上是关于删除方法问题 - Asp.net Web API的主要内容,如果未能解决你的问题,请参考以下文章
从 ASP.NET Webservice 中删除了 WebMethod,方法仍然显示
c# asp.net GridView中如何删除一条记录后刷新页面
从 ASP.Net Web 服务 json 输出中删除“d”对象
从 ASP Net Web API POST 请求中删除空的 xml 标记