【问题标题】:How to serialize a custom exception to json in c#如何在c#中将自定义异常序列化为json
【发布时间】:2010-09-21 19:53:07
【问题描述】:

我有一个使用 jquery ajax 调用的 c# Web 服务。它工作正常,除非在 web 方法中引发自定义异常。出于某种原因,XmlHttpResponse 对象 responseText 仅具有基 Exception 类的属性。所以我最终得到了一个具有以下属性的 json 对象:“ExceptionType”、“Message”和“StackTrace”

我的自定义异常有一个名为“FieldErrors”的属性,它没有显示在返回中。这是该类的代码:

[Serializable]
[XmlRootAttribute(Namespace = "http://www.mydomain.com/", IsNullable = false)]
public class ValidationException : Exception
{
    public List<string> FieldErrors { get; set; }
    public ValidationException(string message = null, Exception innerException = null) : base(message: message, innerException: innerException) 
    {
        this.FieldErrors = new List<string>();
    }
}

我的目标是让“FieldErrors”属性显示在 json 响应中。

【问题讨论】:

  • 我从来没有使用过 JSON 的东西,但是如果你使用 SoapException 会有帮助吗?
  • 嗨。看来 SoapException 没有帮助:(。我仍然没有看到自定义属性

标签: c# jquery json serialization asmx


【解决方案1】:

不要这样做。您永远不应该从您的 asp.net 站点公开异常。

即使最终对用户隐藏,您仍然会将其及其所有详细信息发送给客户端。

在这种情况下,您实际上想要控制将发送的内容,因此您应该明确发送字段错误列表而不发送整个异常实例的 json 版本。

【讨论】:

  • 谢谢。好建议。不过我还是想知道怎么做。这带来了另一个问题,我如何只返回字段错误列表并能够在 ajax“错误”回调中处理它?在返回错误之前是否必须手动将响应代码设置为 500?
  • 是的,您将响应代码设置为 500 以向调用者指示错误。有点不相关/不太可能的情况,但我想补充一下:如果您碰巧正在解密请求中的任何内容,请确保当 api 未能解密(由于填充)时响应与它失败时的响应完全相同,因为解密的值是垃圾。这就是 padding oracle 漏洞的意义所在。此外,如果这样做,最好添加签名。
猜你喜欢
  • 2017-08-31
  • 1970-01-01
  • 2021-04-16
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多