返回CreateErrorResponse或抛出新的HttpResponseException

时间:2014-09-05 18:13:09

标签: angularjs exception-handling httpresponse asp.net-web-api

我是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();
 });

请原谅我,如果这令人困惑,我只是想确定哪种方式的返回错误最适合这种情况以及原因。

1 个答案:

答案 0 :(得分:0)

到目前为止,我没有人回答这个问题......基本上你是在问, How much more expensive is an Exception than a return value?

从性能的角度来看,最好返回错误响应。

一般情况下,我建议尽可能避免抛出异常,特别是如果你期望它们。例外情况应该是例外情况。

根据经验,我会说如果你使用客户端错误(4XX)它们并不例外,因为你预测它们,例如在适当时你可以TryParse然后返回400 BadRequest

相反,如果你的应用程序有很多层,并且一个坏的参数到达你不期望它的地方,你可能会抛出异常,在这些情况下你可能会捕获并将其包装在500错误响应中。与4XX不同,你会得到一个InternalServerError,因为你没想到它。