我有一个webapi后端和一个消费它的客户端。如果后端抛出异常,它会被序列化为HttpError。我完全遵循这里的教程:
http://www.asp.net/web-api/overview/web-api-routing-and-actions/exception-handling
在客户端,我可以反序列化HttpError并使用“JsonConvert.DeserializeObjectAsync(myContentString)”读取所有包含的值 - 这一切都正常。
现在我的第一个问题是:如何在客户端上重新抛出异常?没有像HttpError.Throw()这样的方法吗?
因为我还没有找到类似的东西,我正在创建一个新的自定义异常并传入所有相关的值,包括stacktrace:
throw new MyException(myHttpError["Message"], myHttpError["StackTrace"]);
MyException覆盖StackTrace并简单地返回字符串。这在普通的mvc控制器方法中工作正常但在异步控制器方法中,标准的ASP.NET错误页面将堆栈跟踪从上方显示为“throw ...”行,而不是实际保留在异常内的堆栈跟踪!所以我的第二个问题是:如何在标准的ASP.NET错误页面上显示我在自定义异常上设置的堆栈跟踪?
答案 0 :(得分:0)
将其添加到视图文件的末尾,它应该在正常错误下输出stacktrace。
@if (Model != null)
{
<h3>@Model.Exception.GetType().Name</h3>
<pre>
@Model.Exception.ToString()
</pre>
<p>
thrown in @Model.ControllerName @Model.ActionName
</p>
}