![](/img/trans.png)
[英]Unhanded exceptions appear in wrong place if they are thrown from async methods
[英]Preserve stacktrace of exceptions thrown inside MVC async controller methods
我有一個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錯誤頁面上顯示在自定義異常上設置的stacktrace?
將其添加到視圖文件的末尾,它會在正常錯誤下輸出stacktrace。
@if (Model != null)
{
<h3>@Model.Exception.GetType().Name</h3>
<pre>
@Model.Exception.ToString()
</pre>
<p>
thrown in @Model.ControllerName @Model.ActionName
</p>
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.