我正在使用Web API 2.0创建自己的项目。
我的Api包含添加,获取和预订产品的能力。

我想处理异常,但是有些问题我有点困惑。

我有一个控制器:ProdctController和操作方法AddProdct

   [Route("~/CKService.svc/author/add")]
    [HttpPost]
    public IHttpActionResult AddProduct(ProductRequest request)
    {
        ProductManager.AddProduct(request.ProductId, request.ProductName,
        request.Price);

        return Ok(new AddProductResponse()
        {
            Status = AddProductStatus.Success
        };)
    }


现在,如果该产品已经存在,那么数据访问层将抛出DuplicateKeyException

我要处理此异常并返回如下响应:

  return Ok(new AddProductResponse()
    {
        Status = AddProductStatus.AlreadyExists
    };)



返回HTTP status code 200是否合理?
不添加catch DuplicateKeyException到控制器中怎么办,因为我认为这不是正确的方法。


谢谢

最佳答案

这是一个建议。 (我强调这只是您可以使用的众多选项之一)

重构管理器以处理并返回添加产品的状态,然后使操作根据状态返回适当的响应代码。

[Route("~/CKService.svc/author/add")]
[HttpPost]
public IHttpActionResult AddProduct(ProductRequest request) {
    var status = ProductManager.AddProduct(request.ProductId, request.ProductName, request.Price);
    var response = new AddProductResponse() {
        Status = status
    };
    if(status == AddProductStatus.Success) {
        return Ok(response);
    }
    return BadRequest(response);
}


对于未按预期完成的请求,请避免返回200 OK。那会误导客户提出请求。

关于c# - Web API 2.0异常处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43935645/

10-10 10:35
查看更多