提问人:Yvonne Lin 提问时间:9/17/2023 更新时间:9/17/2023 访问量:23
尝试通过 IErrorHandler 处理请求正文序列化错误,但无法正常工作 (WCF)
Trying to handle request body serialization error by IErrorHandler but not working (WCF)
问:
我正在通过 WebHttpBinding 使用 WCF 实现 RESTful Web 服务,并处理自定义错误处理程序 (IErrorHandler)。目的是捕获所有异常并返回 JSON 错误对象。 这是我在错误处理程序的 ProvideFault 方法中实现的代码:
public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
fault = Message.CreateMessage(version, "", new CustomMsg { code = "99", msg = "error" }, new DataContractJsonSerializer(typeof(CustomMsg)));
var wbf = new WebBodyFormatMessageProperty(WebContentFormat.Json);
fault.Properties.Add(WebBodyFormatMessageProperty.Name, wbf);
var rmp = new HttpResponseMessageProperty
{
StatusCode = HttpStatusCode.OK
};
rmp.Headers[HttpResponseHeader.ContentType] = "application/json";
fault.Properties.Add(HttpResponseMessageProperty.Name, rmp);
}
它适用于除以下情况外的任何其他例外情况: 当给出错误的请求正文的json格式(例如缺少双引号或逗号)时,这会导致ProvideFault方法(get NetDispatcherFaultException)捕获反序列化错误,但最终我得到了意外的html错误(http状态代码400)而不是json格式。 有什么办法可以处理吗?
通过实现 IErrorHandler 自定义错误处理程序,并期望它向客户端返回 JSON 格式对象(http 状态代码 200),尤其是当客户端尝试提供错误的请求正文 json 格式时。
答: 暂无答案
评论