asp.net-mvc – 最佳实践:在web api控制器中处理错误和异常的方法?
|
我正在开发一个项目,并且非常依赖web api进行我所有的客户端操作,无论是帐户详细信息更新,新增的详细信息,修改所有内容已经完成了ASP.NET Web Api和Backbone.js 当前场景: 在当前的方案中,我从我的web api控制器返回一个布尔值,以指示操作是否成功。 示例: [ActionName("UpdateAccountDetails")]
public bool PostAccountDetails(SomeModel model)
{
bool updateStatus = _customService.UpdateAccountDetails(model);
return updateStatus;
}
所以在对这个动作进行ajax调用后,我检查响应是否为true / false,显示错误或成功消息。 问题: 现在发生了什么事情是我在我的动作中开始得到异常,并且动作保持返回false,并显示错误消息。但是我找不到为什么? 所以我想知道是否有一个标准的api响应结构,每一个跟随? 我最初提出了这个想法,让每个web api操作都返回这个类 public class OperationStatus
{
public bool Result { get; set; } // true/false
public string Status { get; set; } // success/failure/warning
public List<string> WarningMessages { get; set; }
public List<string> ErrorMessages { get; set; }
public string OtherDetails { get; set; }
}
这种变化将是一个重大的变化,将是时间和资源消耗,所以我认为更好地对此有第二/第三/第四意见。 请对此有一些想法。 更新: 从Mark Jones开始有little help,我已经想出了这个 [ActionName("UpdateAccountDetails")]
public HttpResponseMessage PostAccountDetails(SomeModel model)
{
bool updateStatus;
string errorMessage;
try{
updateStatus = _customService.UpdateAccountDetails(model);
if(updateStatus)
{
return Request.CreateResponse(HttpStatusCode.OK);
}
return Request.CreateResponse(HttpStatusCode.InternalServerError);
}
catch(Exception exception)
{
errorMessage = exception.Message;
return Request.CreateResponse(HttpStatusCode.InternalServerError,errorMessage);
}
return updateStatus;
}
有什么想法吗? 解决方法您应该避免在控制器的操作中使用try / catch。有很多方法来处理你的问题。 public class ExceptionAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext context)
{
Debug.WriteLine(context.Exception);
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError)
{
Content = new StringContent("An error occurred!"),ReasonPhrase = "Deadly Exception"
});
}
}
然后,您可以使用[ExceptionAttribute]来装饰动作。 我建议您阅读Fredrik Normen的优秀文章 – “ASP.NET Web API异常处理”http://weblogs.asp.net/fredriknormen/archive/2012/06/11/asp-net-web-api-exception-handling.aspx。 他提供了一个很好的Web API异常处理技术概述。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-routing – 在.NET MVC 4.0 URL结构中强制使用
- asp.net-mvc – 在MVC Razor视图页面中使用string.Format
- asp.net-mvc-3 – 如何在自定义编辑器模板中获取模型的字段
- asp.net-mvc – 如何构建一个简单的ASP.NET MVC应用程序?
- asp.net – 当用户按下文本框中的返回时,我可以取消回发吗?
- asp.net-mvc-3 – Azure网站上的RavenDb – 访问被拒绝
- asp.net-mvc – 具有Microsoft.AspNet.Identity的自定义成员
- asp.net-mvc – 在App_Code中的共享@helper中使用@Html
- .net – 设置runat = server时输入名称和ID更改
- asp.net-mvc – Azure服务总线队列触发器功能在运行一段时间
- asp.net-mvc – ASP.NET MVC DropDownListFor不支
- asp.net-mvc – ASP.NET身份与简单的会员优点和缺
- asp.net-mvc – 在Razor web helper中使用html助
- asp.net-mvc – 具有接受routeValues和htmlAttri
- asp.net-mvc – 使用Razor的ASP.NET MVC 3 – 将
- asp.net-mvc – 使用缓存配置文件缓存ChildActio
- asp.net-mvc – 在MVC2中使用区域
- asp.net – 无法加载文件或程序集’Microsoft.Of
- ASP.Net从CodeBehind打开浏览器中的新标签页
- asp.net-mvc-3 – asp.net mvc 3验证摘要不显示通
