Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье рассматриваются различные способы отладки страниц на веб-сайте ASP.NET Web Pages (Razor). Отладка — это процесс поиска и исправления ошибок на кодовых страницах.
Что вы узнаете:
- Отображение сведений, помогающих анализировать и отлаживать страницы.
- Использование средств отладки в Visual Studio.
Ниже приведены ASP.NET функции, представленные в статье:
- Помощник
ServerInfo.ObjectInfoПомощник.Версии программного обеспечения
- веб-страницы ASP.NET (Razor) 3
- Visual Studio 2013 г.
Это руководство также подходит для ASP.NET Web Pages второй версии. Вы можете использовать WebMatrix 3, но интегрированный отладчик не поддерживается.
Важный аспект устранения ошибок и проблем в коде заключается в том, чтобы избежать их в первую очередь. Это можно сделать, поместив разделы кода, которые, скорее всего, могут вызвать ошибки, в блоки try/catch. Дополнительные сведения см. в разделе об обработке ошибок, приведенных в статье "Введение в ASP.NET веб-программирование с помощью синтаксиса Razor".
Вспомогательный ServerInfo инструмент — это средство диагностики, которое предоставляет общие сведения о среде веб-сервера, на которой размещена страница. В нем также отображаются данные HTTP-запроса, отправляемые при запросе браузера на страницу. Вспомогательный ServerInfo элемент отображает текущую идентификацию пользователя, тип браузера, который установил запрос, и т. д. Эта информация поможет вам устранить распространенные проблемы.
Создайте веб-страницу с именем ServerInfo.cshtml.
В конце страницы перед закрывающим
</body>тегом добавьте@ServerInfo.GetHtml():<!DOCTYPE html> <html> <head> <title></title> </head> <body> @ServerInfo.GetHtml() </body> </html>Вы можете добавить
ServerInfoкод в любом месте страницы. Но добавление его в конце будет держать выходные данные отдельно от остального содержимого страницы, что сделает его более удобным для чтения.Замечание
Важно Перед перемещением веб-страниц на рабочий сервер необходимо удалить любой диагностический код. Это относится к
ServerInfoпомощнику, а также к другим диагностическим техникам, описанным в этой статье, затрагивающим добавление кода на страницу. Вы не хотите, чтобы ваши посетители веб-сайта могли просматривать сведения о имени сервера, именах пользователей, путях на сервере и аналогичных деталях, так как этот тип информации может оказаться полезным для людей с злонамеренным намерением.Сохраните страницу и запустите ее в браузере.
Вспомогатель
ServerInfoотображает четыре таблицы информации на странице.Конфигурация сервера. В этом разделе содержатся сведения о веб-сервере размещения, включая имя компьютера, версию ASP.NET, которую вы выполняете, доменное имя и время сервера.
Серверные переменные ASP.NET. В этом разделе содержатся сведения о множестве сведений о протоколе HTTP (называемых переменными HTTP) и значениях, которые являются частью каждого запроса веб-страницы.
Сведения о среде выполнения HTTP. В этом разделе содержатся сведения о версии Microsoft .NET Framework, под управлением которой выполняется веб-страница, о пути, сведения о кэше и т. д. (Как вы узнали в статье "Введение в веб-программирование с помощью синтаксиса Razor", ASP.NET веб-страницы с использованием синтаксиса Razor основаны на технологии веб-сервера корпорации Майкрософт ASP.NET ASP.NET, которая основана на обширной библиотеке разработки программного обеспечения под названием .NET Framework.)
Переменные среды. Этот раздел содержит список всех переменных локальной среды и их значений на веб-сервере.
Полное описание всех сведений о сервере и запросе выходит за рамки этой статьи, но вы можете увидеть, что
ServerInfoпомощник возвращает много диагностических сведений. Дополнительные сведения о возвращаемых значенияхServerInfoсм. в разделе "Распознанные переменные среды " на веб-сайте Microsoft TechNet и переменных сервера IIS на веб-сайте MSDN.
Внедрение выходных выражений для отображения значений страниц
Другой способ увидеть, что происходит в коде, заключается в внедрении выходных выражений на странице. Как вы знаете, вы можете напрямую выводить значение переменной, добавив что-то подобное @myVariable или @(subTotal * 12) на страницу. Для отладки эти выходные выражения можно разместить в стратегических точках кода. Это позволяет увидеть значение ключевых переменных или результат вычислений при запуске страницы. После завершения отладки можно удалить выражения или закомментировать их. Эта процедура иллюстрирует типичный способ использования внедренных выражений для отладки страницы.
Создайте новую страницу WebMatrix с именем OutputExpression.cshtml.
Замените содержимое страницы следующим образом:
<!DOCTYPE html> <html> <head> <title></title> </head> <body> @{ var weekday = DateTime.Now.DayOfWeek; // As a test, add 1 day to the current weekday. if(weekday.ToString() != "Saturday") { // If weekday is not Saturday, simply add one day. weekday = weekday + 1; } else { // If weekday is Saturday, reset the day to 0, or Sunday. weekday = 0; } // Convert weekday to a string value for the switch statement. var weekdayText = weekday.ToString(); var greeting = ""; switch(weekdayText) { case "Monday": greeting = "Ok, it's a marvelous Monday."; break; case "Tuesday": greeting = "It's a tremendous Tuesday."; break; case "Wednesday": greeting = "Wild Wednesday is here!"; break; case "Thursday": greeting = "All right, it's thrifty Thursday."; break; case "Friday": greeting = "It's finally Friday!"; break; case "Saturday": greeting = "Another slow Saturday is here."; break; case "Sunday": greeting = "The best day of all: serene Sunday."; break; default: break; } } <h2>@greeting</h2> </body> </html>В этом примере используется оператор
switchдля проверки значения переменнойweekday, а затем выводится другое сообщение в зависимости от того, какой сегодня день недели. В примере блокifв первом фрагменте кода искусственно изменяет день недели, добавив один день к текущему значению дня недели. Это ошибка, представленная в целях иллюстрации.Сохраните страницу и запустите ее в браузере.
На странице отображается сообщение о неправильном дне недели. Независимо от того, какой день недели это на самом деле, вы увидите сообщение на один день позже. Хотя в этом случае вы знаете, почему сообщение отключено (так как код намеренно задает неверное значение дня), в действительности часто трудно знать, где происходит ошибка в коде. Чтобы выполнить отладку, необходимо выяснить, что происходит со значением ключевых объектов и переменных, таких как
weekday.Добавьте выходные выражения путем вставки
@weekday, как показано в двух местах, указанных примечаниями в коде. Эти выходные выражения будут отображать значения переменной в этой точке в выполнении кода.var weekday = DateTime.Now.DayOfWeek; // DEBUG: Display the initial value of weekday. @weekday // As a test, add 1 day to the current weekday. if(weekday.ToString() != "Saturday") { // If weekday is not Saturday, simply add one day. weekday = weekday + 1; } else { // If weekday is Saturday, reset the day to 0, or Sunday. weekday = 0; } // DEBUG: Display the updated test value of weekday. @weekday // Convert weekday to a string value for the switch statement. var weekdayText = weekday.ToString();Сохраните и запустите страницу в браузере.
На странице отображается реальный день недели, затем обновленный день недели, который приводит к добавлению одного дня, а затем полученное сообщение из инструкции
switch. Выходные данные из двух выражений переменных (@weekday) не имеют пробелов между днями, так как вы не добавили в выходные данные какие-либо теги HTML<p>; выражения предназначены только для тестирования.
Теперь вы увидите, где находится ошибка. При первом отображении переменной
weekdayв коде отображается правильный день. При повторном отображении после блокаifв коде дата смещается на один день. Поэтому вы знаете, что что-то произошло между первым и вторым появлением переменной недели. Если бы это была реальная ошибка, такой подход поможет сузить расположение кода, вызывающего проблему.Исправьте код на странице, удалив добавленные два выходных выражения и удалив код, который изменяет день недели. Оставшийся полный блок кода выглядит следующим образом:
@{ var weekday = DateTime.Now.DayOfWeek; var weekdayText = weekday.ToString(); var greeting = ""; switch(weekdayText) { case "Monday": greeting = "Ok, it's a marvelous Monday."; break; case "Tuesday": greeting = "It's a tremendous Tuesday."; break; case "Wednesday": greeting = "Wild Wednesday is here!"; break; case "Thursday": greeting = "All right, it's thrifty Thursday."; break; case "Friday": greeting = "It's finally Friday!"; break; case "Saturday": greeting = "Another slow Saturday is here."; break; case "Sunday": greeting = "The best day of all: serene Sunday."; break; default: break; } }Запустите страницу в браузере. На этот раз вы увидите правильное сообщение, отображаемое для фактического дня недели.
Использование вспомогательной функции ObjectInfo для отображения значений объектов
Вспомогательный ObjectInfo элемент отображает тип и значение каждого объекта, передаваемого к нему. Его можно использовать для просмотра значения переменных и объектов в коде (например, с выходными выражениями в предыдущем примере), а также можно просмотреть сведения о типе данных об объекте.
Откройте файл с именем OutputExpression.cshtml , созданный ранее.
Замените весь код на странице следующим блоком кода:
<!DOCTYPE html> <html> <head> <title></title> </head> <body> @{ var weekday = DateTime.Now.DayOfWeek; @ObjectInfo.Print(weekday) var weekdayText = weekday.ToString(); var greeting = ""; switch(weekdayText) { case "Monday": greeting = "Ok, it's a marvelous Monday."; break; case "Tuesday": greeting = "It's a tremendous Tuesday."; break; case "Wednesday": greeting = "Wild Wednesday is here!"; break; case "Thursday": greeting = "All right, it's thrifty Thursday."; break; case "Friday": greeting = "It's finally Friday!"; break; case "Saturday": greeting = "Another slow Saturday is here."; break; case "Sunday": greeting = "The best day of all: serene Sunday."; break; default: break; } } @ObjectInfo.Print(greeting) <h2>@greeting</h2> </body> </html>Сохраните и запустите страницу в браузере.
В этом примере вспомогательный
ObjectInfoэлемент отображает два элемента:Тип. Для первой переменной тип
DayOfWeekиспользуется. Для второй переменной тип —String.Значение. В этом случае, так как вы уже отображаете значение переменной приветствия на странице, значение отображается снова при передаче переменной
ObjectInfo.Для более сложных объектов вспомогательный
ObjectInfoэлемент может отображать дополнительные сведения. В основном он может отображать типы и значения всех свойств объекта.
Использование средств отладки в Visual Studio
Для более полной отладки используйте Visual Studio. С помощью Visual Studio можно задать точку останова в коде в строке, которую требуется проверить.
При тестировании веб-сайта выполнение кода останавливается в точке останова.
Вы можете проверить текущие значения переменных и выполнить пошаговое выполнение кода по строкам.
Сведения об использовании интегрированного отладчика в Visual Studio для отладки ASP.NET страниц Razor см. в статье "Программирование ASP.NET веб-страницы (Razor) с помощью Visual Studio.