首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Web API中捕获SerializationException?

如何在Web API中捕获SerializationException?
EN

Stack Overflow用户
提问于 2013-05-15 04:57:16
回答 3查看 3K关注 0票数 12

我有一个在某些情况下抛出SerializationException的ASP.NET Web API web服务。问题是我无法在服务器端捕获和记录这个异常--它唯一出现的地方是客户端的HTTP响应的主体中。

我按照Exception Handling in ASP.NET Web API中的描述注册了一个ExceptionFilterAttribute,并验证了当我在控制器中抛出异常时,它是否工作正常。不幸的是,SerializationException在响应过程中被抛出了(在控制器之后),似乎完全被ASP.NET吞没了。我也试过在Global.asax.cs中挂钩Application_Error(),但它也没有出现在那里。

如何在Web API响应期间捕获SerializationException异常?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-15 08:37:29

如果不是返回一个对象,而是使用ApiController.CreateResponse()方法并返回一个HttpResponseMessage,那么您可以执行response.Content.LoadIntoBufferAsync().Wait(),这将强制序列化在您仍在操作中时发生,因此可以捕获异常。

票数 9
EN

Stack Overflow用户

发布于 2013-05-15 05:14:36

顺便说一句,响应的序列化实际上发生在主机层(在HttpControllerHandler中,当托管在IIS中时,在HttpSelfhostServer中,当托管在SelfHost中时),它位于堆栈的下方,而不是在响应从操作返回之后立即发生。

WebAPI Stack发信人:http://www.asp.net/posters/web-api/ASP.NET-Web-API-Poster-grayscale.pdf

这就是说,我不能想出一个直接的方法来实现这一点。这很麻烦,但可能会覆盖默认Xml和Json格式化程序的WriteToStreamAsync方法,并尝试捕获记录任何异常?

或者,您可以启用Web API跟踪,这将记录序列化过程中发生的异常。但是,如果您不知道导致序列化错误的请求,那么您可能希望始终启用跟踪,我不确定您是否想要这样做。

票数 2
EN

Stack Overflow用户

发布于 2014-03-04 14:41:31

您可以通过注册IExceptionHandler的实现来捕获所有Web API异常。

请参阅Web API Global Error Handling

...there是许多异常过滤器无法处理的情况。例如:

从控制器constructors.

  • Exceptions引发的

  • 异常从响应内容序列化过程中引发的routing.

  • Exceptions期间引发的消息handlers.

  • Exceptions引发。

在那篇文章中没有提到的一件事是,您的IExceptionHandler必须通过GlobalConfiguration.Configuration.Services.Add(...)或通过配置为供DependencyResolver使用的IoC容器进行注册。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16552715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档