有没有办法将整个异常对象传递到 c# Web 表单中的错误处理页面

Is there a way to pass the entire exception object to an error handling page in a c# webform

提问人:Michael Wood 提问时间:7/20/2023 更新时间:7/21/2023 访问量:28

问:

似乎我应该能够将整个异常对象传递到另一个页面。在本例中,我正在创建一个自定义错误处理页面。我到处寻找,但我没有找到我需要的东西。我真的很希望能够在我的 Oops 页面上剖析错误,在那里我可以记录错误并向我的用户显示友好消息,以便他们可以打印屏幕并将其带给应用程序开发团队。举个例子,我想仔细阅读跟踪的框架

        var stackTrace = new StackTrace(ex, true);
        var allframes = stackTrace.GetFrames().ToList();
        foreach(var frame in allframes)
        {
            var filename = frame.GetFileName();
            var linenumber = frame.GetFileLineNumber();
            var method = frame.GetMethod();
            var MethodName = method.Name;
            var Classname = frame.GetMethod().DeclaringType.ToString();
        }

所以我尝试了显而易见的方法。

HttpContext.Current.Response.Redirect(String.Format("~/Oops.aspx/Error=?{0}",ex));

这将生成换行符错误。

使用 HttpUtility.UrlEncode 无法将对象转换为字符串

在我看来,转换为字符串会丢失一堆数据。

到目前为止,我已经简化为字符串数据的速记传递,与我可以获得整个异常对象所能得到的数据相比,这是残缺的。

HttpContext.Current.Response.Redirect(string.Format("~/Oops.aspx?Error={0}&StackTrace={1}&InnerException={2}&Data={3}&Source={4}&TargetSite={5}&Hresult={6}", ex.Message, ex.StackTrace, ex.InnerException, ex.Data, ex.Source, ex.TargetSite, ex.HResult));

那么事实就是如此吗?还是我错过了什么?似乎我应该能够将整个对象传递到另一个页面,但话又说回来......

提前感谢您的任何帮助!

C# 异常 日志记录 错误处理 Web 窗体

评论

1赞 Fildor 7/20/2023
你真的不想在生产中这样做。它是一种攻击媒介。如果用户出现错误,则需要在开发系统上复制它。在那里,您可以脱口而出您想要和需要的所有信息到您的日志或屏幕上。
1赞 Michael Wood 7/20/2023
对不起,是的,除了管理员级别权限的信息外,不会显示对攻击向量扇区很重要的信息。向普通用户和临时用户显示一般错误消息。感谢您的反馈。
0赞 Fildor 7/20/2023
还行。这样就不碍事了:您将如何使用需要在普通页面中显示的查询的某些结果对象进行重定向?最后,该异常是一个对象。并且您想要显示其属性。
0赞 Michael Wood 7/20/2023
好的,回答我的问题怎么样,我会在此过程中处理和担心特殊情况。嘘。
0赞 Albert D. Kallal 7/21/2023
将错误对象放入会话中,然后在目标页面中获取该对象。换句话说,我认为在 URL 中作为查询参数传递没有多大意义。但是,在大多数情况下,我会将用户重定向到主页或项目页面,并且无论如何都会将错误信息通过电子邮件发送给开发团队。换句话说,有一些错误页面并没有多大帮助,因为无论如何,要重现用户的错误通常非常困难。因此,添加一个全局错误陷阱,并将其用于电子邮件,然后将用户重定向回其主页或项目页面或其他页面。

答:

0赞 Michael Wood 7/21/2023 #1

感谢大家查看和审查我的问题,并为我的查询提供见解。

我选择了一条不同的路线,

我现在没有抓住异常并定向到 Oops 页面,而是定向到 ExceptionUtility.LogException 方法来记录和提取我想要的所有详细信息,然后直接转到 Oops 页面以显示友好的错误消息。

谢谢大家!