3

有没有一种简单的方法可以将 \cast 转换HttpErrorException

我正在考虑利用反射来实例化基于内容的异常HttpError.Message- 这是完成我想做的事情的最佳方式吗?

4

3 回答 3

5

您不能将 an 转换/转换HttpErrorException. 相反,您可以使用HttpError.Message创建新的异常(或您自己的自定义异常)

throw new Exception(HttpErrorObject.Message);

编辑:如果您想要自己的自定义异常,那么您可以创建一个类,如:

class MyHttpException : Exception
{
    public HttpError HttpErrorObject { get; set; }
    public MyHttpException(string Message, HttpError ErrorObject)
        : base(Message)
    {
        this.HttpErrorObject = ErrorObject;
    }
}

然后你可以像这样使用它:

HttpError httpErrorObject = new HttpError("404");
throw new MyHttpException(httpErrorObject.Message, httpErrorObject);

包括原始错误对象,正如@Reed Copsey在他的回答中所说的那样。

于 2013-09-26T17:18:59.913 回答
4

您总是可以只创建自己的自定义异常,并使用HttpError.Message属性来获取合理的消息:

throw new YourHttpException(httpError.Message);

包括HttpError也可能是有益的,因为它是一个完整的潜在错误字典。

于 2013-09-26T17:18:04.800 回答
1

事实证明,使用反射非常简单,但是您会丢失一些元素,包括堆栈跟踪。

Type exceptionType = Type.GetType(httpError["ExceptionType"].ToString());
ConstructorInfo exceptionConstructor = exceptionType.GetConstructor(new[] { typeof(string) });
throw (Exception)exceptionConstructor.Invoke(new object[] { httpError["ExceptionMessage"] });
于 2013-09-27T17:37:59.910 回答