#c# #asp.net-mvc #email #exception-handling
#c# #asp.net-mvc #Адрес электронной почты #исключение
Вопрос:
Я подумываю о добавлении некоторого кода в мой 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, "rn");
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;
}
Комментарии:
1. Если вы используете MVC3, вы можете установить пакет Elmah из NuGet. code.google.com/p/elmah
2. Если кто-то хочет отправить вам спам, файл cookie не очень надежен.
Ответ №1:
В зависимости от того, как скоро вы хотите получить исключения, вы всегда можете просто записать их в файл, а затем отправлять файл самому себе каждые 10 минут, 1 час, 1 день и т.д.
Таким образом, вам не нужно сильно беспокоиться о том, что люди будут рассылать спам на веб-сайт, поскольку это будет просто куча повторяющихся исключений в файле.
После отправки файла вы можете удалить его или каким-то образом пометить его как отправленный, а затем запустить новый файл. Таким образом, вы получаете файл по электронной почте только тогда, когда нужно отправить что-то новое.
Комментарии:
1. Отличная идея, я попробую это в понедельник.
Ответ №2:
Лично я бы не стал решать проблему так, как вы предлагаете. Вам лучше отправлять по электронной почте каждое отдельное исключение, а затем находить удобный способ фильтрации писем по мере их поступления.
У меня аналогичная настройка процесса с использованием Elmah (вам следует изучить возможность его использования), и я могу сказать, что если бы у меня был фильтр, подобный предлагаемому вами, я бы упустил важную информацию, помогающую диагностировать проблемы.
Я хочу сказать, что в конечном итоге это проглотит некоторые исключения, которых вы не хотели.
Кроме того, я могу сказать вам из первых рук, что вы в любом случае будете получать спам из-за необработанных исключений. Количество необработанных исключений, возникающих из-за многочисленных хакерских уязвимостей и даже поисковых ботов, мгновенно переполнит ваш почтовый ящик.
Комментарии:
1. Хорошая идея, я посмотрю на Elmah. Спасибо за совет о spider amp; ботах. Я не подумал об этом, поскольку большинство моих приложений являются внутренними (ожидайте нескольких).