Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过电子邮件发送未处理的异常时减少数量的最佳方法_C#_Asp.net Mvc_Email_Exception Handling - Fatal编程技术网

C# 通过电子邮件发送未处理的异常时减少数量的最佳方法

C# 通过电子邮件发送未处理的异常时减少数量的最佳方法,c#,asp.net-mvc,email,exception-handling,C#,Asp.net Mvc,Email,Exception Handling,我正在考虑向我的web应用程序中的global.asax添加一些代码,以便在出现未处理的异常时向我发送电子邮件 目前,我正在做以下工作 在用户的机器上编写cookie-以防垃圾邮件攻击F5并重新启动网站 将条目添加到system.Web.Cache中- 我错过什么了吗?你会做些不同的事情吗 protected void Application_Error() { var ex = Server.GetLastError(); Server.ClearError();

我正在考虑向我的web应用程序中的global.asax添加一些代码,以便在出现未处理的异常时向我发送电子邮件

目前,我正在做以下工作

  • 在用户的机器上编写cookie-以防垃圾邮件攻击F5并重新启动网站
  • 将条目添加到system.Web.Cache中-
我错过什么了吗?你会做些不同的事情吗

protected void Application_Error()
{
    var ex = Server.GetLastError();
    Server.ClearError();

    if (NotInCache(ex))
    {
        // Email support
    }
}



private static bool NotInCache(Exception ex)
{
    bool returnValue = true;

        if (ex != null)
        {
            HttpContext current = HttpContext.Current;
            LogWriter.Trace(MethodBase.GetCurrentMethod(), Dfait.Diagnostics.TraceLevel.Level4, "Checking Cache for our exception");

            if (current != null)
            {
                string key = ex.StackTrace;
                string[] split = System.Text.RegularExpressions.Regex.Split(ex.StackTrace, "\r\n");
                string value = "Exception Exists";
                DateTime expiryDate = DateTime.Now.AddDays(1);

                if (split.Length > 0)
                {
                    key = split[0];
                }

                key = key.Trim();

                HttpCookie remedyCookie = current.Request.Cookies[key];

                if (remedyCookie == null)
                {
                    HttpCookie newCookie = new HttpCookie(key, value);
                    newCookie.Expires = expiryDate;
                    current.Response.Cookies.Add(newCookie);
                }
                else
                {
                    returnValue = false;
                }

                // The next block is to check the cache of the user.
                object foundCache = HttpRuntime.Cache[key];

                if (foundCache == null)
                {
                    HttpRuntime.Cache.Insert(key, value, null, expiryDate, TimeSpan.Zero);
                }
                else
                {
                    returnValue = false;
                }
            }
        }

    return returnValue;
}

根据您希望异常发生的时间,您可以随时将其记录到一个文件中,然后每隔10分钟、1小时、1天等通过电子邮件将该文件发送给您自己

这样你就不必担心人们是否会对网站发垃圾邮件,因为它只是文件中的一堆重复异常


发送文件后,您可以删除该文件或将其标记为已发送,然后启动一个新文件,这样,只有在有新文件要发送时,您才会收到电子邮件发送的文件。

根据您希望异常的时间长短,您可以随时将其记录到文件中,然后每隔10分钟、1小时将该文件发送给您自己,一天等等

这样你就不必担心人们是否会对网站发垃圾邮件,因为它只是文件中的一堆重复异常


一旦你发送了文件,你就可以删除它或删除一些标记为已发送的文件,然后开始一个新的文件,这样你只会在有新的文件要发送时收到一封电子邮件。

就我个人而言,我不会按照你建议的方式来解决这个问题。你最好在每一个例外情况下都收到电子邮件,然后找到一种很好的方法来过滤电子邮件

我有一个类似的过程设置,使用(你应该研究一下使用它),我可以告诉你,如果我有一个你建议的过滤器,我会错过帮助诊断问题的重要信息

我想说的是,它最终会吞下一些你不想看到的异常


另外,我可以直接告诉你,不管怎样,你都会因为未处理的异常而收到垃圾邮件。大量黑客漏洞蜘蛛甚至搜索机器人出现大量未处理的异常,很快就会让您的收件箱溢出。

我个人不会按照您建议的方式解决问题。你最好在每一个例外情况下都收到电子邮件,然后找到一种很好的方法来过滤电子邮件

我有一个类似的过程设置,使用(你应该研究一下使用它),我可以告诉你,如果我有一个你建议的过滤器,我会错过帮助诊断问题的重要信息

我想说的是,它最终会吞下一些你不想看到的异常


另外,我可以直接告诉你,不管怎样,你都会因为未处理的异常而收到垃圾邮件。大量黑客漏洞爬行器甚至搜索机器人出现的未处理异常数量将使您的收件箱立即溢出。

如果您使用的是MVC3,您可以从NuGet安装Elmah软件包。如果有人想向你发送垃圾邮件,cookie就不太可靠。如果你使用的是MVC3,你可以从NuGet安装Elmah软件包。如果有人想给你发垃圾邮件,饼干就不太可靠了。好主意,我会在星期一试试。好主意,我会在星期一试试。真棒,我会看看Elmah。感谢您提供有关蜘蛛和机器人的提示。我没有想到这一点,因为我的大多数应用程序都是内部应用程序(除了少数)。很好的洞察力,我会看看Elmah。感谢您提供有关蜘蛛和机器人的提示。我没有想到这一点,因为我的大多数应用程序都是内部的(除了少数)。