是否有记录Web API调用返回的可能错误代码的最佳做法?我指的是自定义逻辑错误而不是标准HTTP返回码。
例如,考虑允许用户更改其密码的API方法。可能的错误情况可能是该用户先前已使用所提供的新密码(即密码历史记录要求)。您可以使用以下代码将其传达给调用者:
public HttpResponseMessage ChangePassword(string oldPassword, string newPassword)
{
try
{
passwordService.ChangePassword(oldPassword, newPassword)
return Request.CreateResponse(HttpStatusCode.OK);
}
catch (Exception ex)
{
switch(ex.Message)
{
case "PasswordHistoryFailed":
return Request.CreateResponse(HttpStatusCode.BadRequest, new CustomErrorClass("FailedHistoryRequirements"));
break;
...
}
}
}
在此示例中,我使用自定义错误类来包装自定义错误代码“FailedHistoryRequirements”。我可以为此操作添加更多错误代码,例如24小时内更改密码或其他任何内容。
我想知道是否有一种可接受的方法可以在方法的XML代码注释中自动记录这些自定义错误代码,以便文档生成器(如Swashbuckle / Swagger或类似的东西)可以使用它。
答案 0 :(得分:3)
如果您使用Swagger,则可以使用SwaggerResponse
属性。
查看此博文:
https://mattfrear.com/2015/04/21/generating-swagger-example-responses-with-swashbuckle/
答案 1 :(得分:1)
我是通过捕获特定的异常类型而不是解析消息来实现的。
这里我将MyDepartmentTentricBaseException作为自定义异常。我可能有2-3个异常来自它。但是通过使用基本异常,我保持我的异常捕捉清洁。
try
{
/* do something */
}
catch (MyDepartmentCentricBaseException deptEx)
{
HttpResponseException hrex = this.GetDepartmentMissingHttpResponseException(deptEx.DepartmentSurrogateKey);
throw hrex;
}
catch (Exception ex)
{
/* log it somewhere !*/
throw new HttpResponseException(HttpStatusCode.InternalServerError);
}
private HttpResponseException GetDepartmentMissingHttpResponseException(int DepartmentSurrogateKey)
{
HttpResponseMessage resp = new HttpResponseMessage(HttpStatusCode.NotFound)
{
Content = new StringContent(string.Format("No Department with DepartmentSurrogateKey = {0}", DepartmentSurrogateKey)),
ReasonPhrase = "DepartmentSurrogateKey Not Found"
};
HttpResponseException returnEx = new HttpResponseException(resp);
return returnEx;
}
这里有其他想法:
https://docs.microsoft.com/en-us/aspnet/web-api/overview/error-handling/exception-handling
但我不知道一种自动伏都教的方法 - 它带有文档。 :(