我正在使用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/