我是Web API的新手(在VS 2012中使用C#)并试图帮助一个涉及将更有意义的错误返回到AngularJS前端的项目,但我不确定是否有一个首选的方法只是捕捉错误并说
return Request.CreateErrorResponse(..
与
throw new HttpResponseException(Request.CreateErrorResponse(...
我不完全理解用于返回响应错误的专家和用户。
对于更多背景,会发生什么是我们正在上传Excel文件,并且我们有各种用例在解析时会导致错误等。我想异步返回错误消息,这些消息可以清楚地说明导致错误的原因,而不是模糊的“异常”。
所以我正在尝试诸如
之类的东西try
{
//stuff
}
catch (FormatException e)
{
return Request.CreateErrorResponse(HttpStatusCode.Conflict, "issue 1");
}
catch (FileFormatException e)
{
return Request.CreateErrorResponse(HttpStatusCode.Conflict, "issue 2");
}
catch (Exception ex)
{
return Request.CreateErrorResponse(HttpStatusCode.Conflict, "issue 3");
}
我可以在哪里给错误更有目的的意思。我很困惑我是否应该“返回”Request.CreateErrorResponse
,或“抛出”throw new HttpResponseException(Request.CreateErrorResponse(...
在前端我只是读回错误
.error(function (data) {
$scope.uploadFailed = true; //shows the message span
$scope.uploadMsg = data["Message"].trim();
});
请原谅我,如果这令人困惑,我只是想确定哪种方式的返回错误最适合这种情况以及原因。
答案 0 :(得分:0)
到目前为止,我没有人回答这个问题......基本上你是在问, How much more expensive is an Exception than a return value?
从性能的角度来看,最好返回错误响应。
一般情况下,我建议尽可能避免抛出异常,特别是如果你期望它们。例外情况应该是例外情况。
根据经验,我会说如果你使用客户端错误(4XX)它们并不例外,因为你预测它们,例如在适当时你可以TryParse
然后返回400 BadRequest
。
相反,如果你的应用程序有很多层,并且一个坏的参数到达你不期望它的地方,你可能会抛出异常,在这些情况下你可能会捕获并将其包装在500错误响应中。与4XX不同,你会得到一个InternalServerError
,因为你没想到它。