Наш магазин имеет некоторый обобщенный код регистрации ошибок, который для веб-страниц включает в себя ведение журнала свойств запроса. Этот журнал ошибок стабилен в течение многих лет. В последнее время мы получили несколько ошибок, когда входной сигнал формы пользователя не мог быть обработан, а затем логгер также бомбил при попытке изучить поля формы. Он успешно зарегистрировал Request.Headers непосредственно перед попыткой Request.Form. Опуская некоторые форматирования вещи, которые, вероятно, не имеет отношения, это в основном сводится к:ASP.Net: итерация по коллекции Request.Form приводит к исключению нулевой ссылки
try
{
foreach (string key in HttpContext.Current.Request.Form.Keys)
{
if (IsPrivateField(key.ToLower()))
AppendToLog(key + ": " + Regex.Replace(HttpContext.Current.Request.Form[key], @"[a-zA-Z0-9]", "*"));
else
AppendToLog(key + ": " + HttpContext.Current.Request.Form[key]);
}
}
catch (Exception ex)
{
AppendToLog("Error: " + ex.Message.ToString());
}
Как же может быть пустой ссылкой исключения при доступе к форме [ключ] где ключ пришел из коллекции Form.Keys? Или поочередно, как может Form.Keys включать нулевое значение или быть нулевым? Если вы скажете мне, что это невозможно, я могу опубликовать более полную версию, чтобы узнать, не пропустил ли я что-нибудь, что добавит вульверность к разыменованию.
У нас также были инциденты в последнее время, когда поля формы, которые должны были быть проверены, опустели. Может быть, у нас есть какой-то обобщенный гремлин в нашем состоянии формы.
Что такое стек следа, за исключением? Предоставляет ли он какой-либо номер строки или исходную информацию? – Dai