1

我有一个 webapi 后端和一个使用它的客户端。如果后端抛出异常,它会被序列化为 HttpError。我完全按照这里的教程:

http://www.asp.net/web-api/overview/web-api-routing-and-actions/exception-handling

在客户端,我可以反序列化 HttpError 并使用“JsonConvert.DeserializeObjectAsync(myContentString)”读取包含的所有值 - 这一切正常。

现在我的第一个问题是:如何在客户端重新抛出异常?没有像HttpError.Throw()这样的方法吗?

因为我还没有找到类似的东西,所以我正在创建一个新的自定义异常并传入所有相关值,包括堆栈跟踪:

throw new MyException(myHttpError["Message"], myHttpError["StackTrace"]);

MyException 覆盖 StackTrace 并简单地返回字符串。这在普通的 mvc 控制器方法中工作正常,但在异步控制器方法中,标准的 ASP.NET 错误页面从上面显示堆栈跟踪到“throw...”行,而不是实际保存在异常中的堆栈跟踪!所以我的第二个问题是:如何在标准 ASP.NET 错误页面上显示我在自定义异常上设置的堆栈跟踪?

4

1 回答 1

0

将此添加到视图文件的末尾,它应该在正常错误下输出堆栈跟踪。

@if (Model != null)
{
    <h3>@Model.Exception.GetType().Name</h3>
    <pre>
        @Model.Exception.ToString()
    </pre>
    <p>
        thrown in @Model.ControllerName @Model.ActionName
    </p>
}
于 2014-11-18T21:21:38.773 回答