- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 WCF 4 Rest 服务,它由一个 java 客户端和一个 c# mvc3 客户端使用。响应内容需要以json形式返回。
我希望能够以一致的方式将任何异常/故障返回给客户。我读到应该使用 WebFaultException 并且确实可以正常工作。
但是,我不想用 WebFaultExceptions 污染我的应用程序逻辑项目,因为它可能被非 Web 项目使用。
因此,我查看了在 WCF Rest 服务中实现 IErrorHandler 以捕获任何异常,然后针对特定异常(即 ValidationException)将异常作为包含在 WebFaultException 中的故障返回。然而,这似乎不起作用,当调用 form fiddler 时,我得到以下 Http 504 响应
[Fiddler] ReadResponse() 失败:服务器未返回对此请求的响应。
我已将代码精简到最基本的部分,以展示我正在做的事情的本质。
public void ProvideFault(Exception error,
MessageVersion version,
ref Message fault)
{
var ex = new WebFaultException<Exception>(
new Exception("you can't do that"),
HttpStatusCode.Unauthorized);
var xmf = ex.CreateMessageFault();
fault = Message.CreateMessage(version,
null,
xmf,
new DataContractJsonSerializer(xmf.GetType()));
}
我做错了什么?
最佳答案
这是来自 Carlos's blog 的示例代码.它在过去对我有帮助。
public class ValidationAwareErrorHandler : IErrorHandler
{
IErrorHandler originalErrorHandler;
public ValidationAwareErrorHandler(IErrorHandler originalErrorHandler)
{
this.originalErrorHandler = originalErrorHandler;
}
public bool HandleError(Exception error)
{
return error is ValidationException || this.originalErrorHandler.HandleError(error);
}
public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
ValidationException validationException = error as ValidationException;
if (validationException != null)
{
fault = Message.CreateMessage(version, null, new ValidationErrorBodyWriter(validationException));
HttpResponseMessageProperty prop = new HttpResponseMessageProperty();
prop.StatusCode = HttpStatusCode.BadRequest;
prop.Headers[HttpResponseHeader.ContentType] = "application/json; charset=utf-8";
fault.Properties.Add(HttpResponseMessageProperty.Name, prop);
fault.Properties.Add(WebBodyFormatMessageProperty.Name, new WebBodyFormatMessageProperty(WebContentFormat.Json));
}
else
{
this.originalErrorHandler.ProvideFault(error, version, ref fault);
}
}
class ValidationErrorBodyWriter : BodyWriter
{
private ValidationException validationException;
Encoding utf8Encoding = new UTF8Encoding(false);
public ValidationErrorBodyWriter(ValidationException validationException)
: base(true)
{
this.validationException = validationException;
}
protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
{
writer.WriteStartElement("root");
writer.WriteAttributeString("type", "object");
writer.WriteStartElement("ErrorMessage");
writer.WriteAttributeString("type", "string");
writer.WriteString(this.validationException.ValidationResult.ErrorMessage);
writer.WriteEndElement();
writer.WriteStartElement("MemberNames");
writer.WriteAttributeString("type", "array");
foreach (var member in this.validationException.ValidationResult.MemberNames)
{
writer.WriteStartElement("item");
writer.WriteAttributeString("type", "string");
writer.WriteString(member);
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.WriteEndElement();
}
}
}
关于c# - wcf rest ierrorhandler webfaultexception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12457039/
我们有一个使用 WCF 构建的 REST API。 我们使用 WebFaultException 处理后端的所有异常,如下所示: throw new WebFaultException(e.Messa
我正在使用 WCF REST 服务 (4.0) 公开 JSON API ..但没有得到我的 WebFaultException去工作。 我的方法中有以下内容: if (!int.Try
我正在创建一个以 JSON 格式返回数据的 WCF 服务。我试图弄清楚如何最好地处理异常,并且我正在尝试使用 WebFaultException 类在响应中返回异常详细消息,稍后可以将其输出给用户。
我有一个 WCF REST 服务,其接口(interface)方法用 [WebGet(..., ResponseFormat = WebMessageFormat.Json)] 注释并且通常提供 JS
我有一个 WCF 4 Rest 服务,它由一个 java 客户端和一个 c# mvc3 客户端使用。响应内容需要以json形式返回。 我希望能够以一致的方式将任何异常/故障返回给客户。我读到应该使用
我创建了自定义异常,每次发生错误时都会在 try-catch 中抛出该异常: [Serializable] public class CustomException : Exception {
当我的代码中出现异常时,我想将其作为 FaultException/WebFaultException 返回,具体取决于它是 REST 还是 SOAP。以下问题与我项目的 REST 组件有关。异常被触
我正在开发 .net 3.5 REST WCF 应用程序。我找到了 WebFaultException是处理 REST 服务错误的最佳方式。我似乎无法在 .net 3.5 中找到 WebFaultEx
我有一个抛出 WebFaultException 的服务器 try { ... } catch (InvalidPasswordException) { throw new WebFa
我有一个 .Net 服务器应用程序(包含 WCF REST JSONP 服务)和客户端的 JavaScript 应用程序。 为了避免来自 javascript 端的跨域调用,我们使用 JSONP 进行
我试图让 WebFaultException 以 json 和 xml 的形式返回,这取决于客户端的要求,如 中所述 http://blogs.msdn.com/b/endpoint/archive/
我正在使用 WCF REST 服务模板 40(CS)。我这样抛出 WebFaultExceptions: throw new WebFaultException("Error Message", Ht
我有一个 WCF REST 项目,它将 http 状态代码作为 WebFaultExceptions 返回。这对于 GET 调用非常有效,但我在为 POST 调用返回 WebFaultExceptio
我是一名优秀的程序员,十分优秀!