保留在MVC异步控制器方法中抛出的异常的堆栈跟踪

时间:2013-08-20 16:45:56

标签: c# exception asp.net-mvc-4 async-await

我有一个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错误页面上显示我在自定义异常上设置的堆栈跟踪?

1 个答案:

答案 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>
}