2013-08-20 656 views
1

我有一个后端的WebAPI和客户消费它里面抛出的异常的堆栈跟踪。如果后端引发异常,它会被序列化为HttpError。我在这里充分以下教程:保留MVC异步控制器方法

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覆盖堆栈跟踪,只是返回的字符串。这在正常的MVC控制器的方法,但在异步控制器方法标准的ASP.NET错误页面工作正常,从上面并没有这实际上保持了异常中的堆栈跟踪显示堆栈跟踪到“抛......”行了!所以我的第二个问题是:如何显示我在标准ASP.NET错误页上的自定义异常上设置的堆栈跟踪?

+0

你确定你覆盖'StackTrace'吗? “覆盖”关键字是否存在? –

+0

看起来你会在页面代码的最后找到一个HTML注释的堆栈跟踪。我不知道为什么这样做。 – svick

+0

@Daniel:是的...... – srudin

回答

0

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

@if (Model != null) 
{ 
    <h3>@Model.Exception.GetType().Name</h3> 
    <pre> 
     @Model.Exception.ToString() 
    </pre> 
    <p> 
     thrown in @Model.ControllerName @Model.ActionName 
    </p> 
}