【问题标题】:ASP.Net Web API Action ResultASP.Net Web API 操作结果
【发布时间】:2016-11-06 04:51:43
【问题描述】:

我正在构建一个 ASP.Net Web API 应用程序,并且我有以下代码...

public IHttpActionResult GetCustomers() {            
    var customers = context.Customers.ToList();
    return Ok(customers);
}

我使用 Ok() 方法返回客户,因为我使用的是 IHttpActionResult 返回类型。

现在如果我有以下方法

public void DeleteCustomer(int id) {
  var customerInDb = context.Customers.SingleOrDefault(c => c.Id == id);

  if (customerInDb == null) {
      NotFound();
  }

  context.Customers.Remove(customerInDb);
  context.SaveChanges();
}

当我的 ActionMethod 的返回类型为 void 时,我可以在这里使用 NotFound() 方法吗???

【问题讨论】:

  • 我们是否应该猜测您的 NotFound 方法的作用?如果您需要帮助,请提供更多代码
  • NotFound() 是 ASP.Net Web API 的内置方法
  • 在控制器中验证这一点并仅在 ID 有效时调用 delete 不是更好吗?这样你就可以添加一个简单的 Modelerror 并完成它。
  • 那你为什么把你的 DeleteCustomer 方法的返回类型设置为 void 呢?返回 IHttpActionResult...
  • 根据 REST-ful 约定,当您发出 HttpGET 请求时,通常会有一个返回类型为 IHttpActionResult 的 ActionResult,它返回 Ok() 以返回 statusCode 200..当您发出 HttpPOST 请求时创建一条记录,您通常有一个返回类型为 IHttpActionResult 的 ActionResult,它返回 Created() 以返回 statusCode 201 ...当您发出 HttpDelete 请求删除记录时,ActionResult 的返回类型为 void..所以我需要知道我是否返回 NotFound()

标签: asp.net


【解决方案1】:

Void 没有返回类型。所以你可以试着打电话给NotFound(),但我不确定这是否能编译——还没试过。为什么不直接使用IHttpActionResult

public IHttpActionResult DeleteCustomer(int id)
{
    var customerInDb = context.Customers.SingleOrDefault(c => c.Id == id);
    if (customerInDb == null)
    {
        return NotFound();
    }

    context.Customers.Remove(customerInDb);
    context.SaveChanges();

    return Ok(customerInDb);
}

使用IHttpActionResult 是更优雅的版本。如果 id 无效,您可以安全地退出您的方法并告诉调用客户端出现问题。如果一切顺利,您只是在向客户竖起大拇指。如果您返回已删除的实体或只是一个空的Ok(),此时应该无关紧要。

使用 void 可能会也可能不会删除您数据存储中的实体。客户端永远不会知道,因为服务器不会返回任何响应。

【讨论】:

  • 如果我只使用 IHttpActionResult 进行删除并返回 Ok() 它将起作用..但我想知道普遍接受的约定是什么......从我读过的删除方法应该(不必)返回无效
  • 我从未听说过这样的约定。为什么不回应比告诉客户结果是什么更好?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多