簡體   English   中英

保留在MVC異步控制器方法中引發的異常的堆棧跟蹤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM