Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описываются проблемы, которые могут возникнуть при работе с ASP.NET веб-страницами (Razor) и некоторыми предлагаемыми решениями.
Версии программного обеспечения
- веб-страницы ASP.NET (Razor) 3
Этот учебник также совместим с ASP.NET Web Pages 2 и ASP.NET Web Pages 1.0.
Этот раздел состоит из следующих подразделов.
- Проблемы с запущенными страницами
- Проблемы с кодом Razor
- Проблемы с безопасностью и членством
- Проблемы с отправкой электронной почты
- Дополнительные ресурсы
Общие вопросы см. в разделе ASP.NET часто задаваемые вопросы о веб-страницах (Razor).
Проблемы с запущенными страницами
Различные проблемы могут препятствовать правильному выполнению страниц CSHTML и VBHTML . В этом разделе перечислены распространенные сообщения об ошибках и вероятные причины.
Ошибка HTTP 403 — запрещено: доступ запрещен
У вас нет разрешения на просмотр этого каталога или страницы с помощью предоставленных учетных данных.
Эта ошибка может возникать, если сервер не выполняет правильную версию .NET Framework. Убедитесь, что компьютер под управлением сервера (локально или удаленно) установлен по крайней мере .NET Framework 4. Кроме того, убедитесь, что приложение настроено для запуска правильной версии.
Если эта проблема отображается локально при работе в WebMatrix, щелкните рабочую область сайта, затем в древовидном представлении щелкните Параметры. В списке версий .NET Framework выберите .NET 4 (интегрированная версия). Если эта версия уже установлена, попробуйте запустить WebMatrix в качестве администратора.
Убедитесь, что корневой каталог веб-сайта содержит по крайней мере один CSHTML-файл .
Если эта ошибка возникает, когда веб-сервер находится на удаленном сервере, обратитесь к администратору сервера. Убедитесь, что сервер установлен на платформе .NET Framework 4 или более поздней версии. Кроме того, убедитесь, что приложение работает в пуле приложений, настроенном для использования этой версии the.NET Framework.
Если у вас есть контроль над сервером, убедитесь, что он работает с правильной версией .NET Framework. Вы также можете попытаться восстановить установку, выполнив aspnet_regiis -iru команду. (Например, если после установки .NET Framework установить IIS, IIS не будет правильно настроен для запуска страниц ASP.NET.) Дополнительные сведения см. в разделе Средство регистрации ASP.NET IIS (Aspnet_regiis.exe).
Ошибка HTTP 403.14 — запрещено
Веб-сервер настроен не для перечисления содержимого этого каталога.
Эта ошибка может возникать, если вы запрашиваете защищенный ресурс (например, файл Web.config ) или находится в защищенной папке (например, App_Data или App_Code).
Ошибка HTTP 404.17 — не найдена
Запрошенный контент, как представляется, скрипт и не будет обслуживаться статическим обработчиком файлов.
Эта ошибка может возникать, если сервер не настроен правильно для использования .NET Framework 4 или более поздней версии и поэтому не распознает код в @{ } блоках. См. описание ошибки HTTP 403 — запрещено: доступ запрещен.
Ошибка HTTP 404.7 — не найдена
Модуль фильтрации запросов настроен для запрета расширения файла
Эта ошибка может возникать, если расширения CSHTML или VBHTML были явно заблокированы на сервере. Симптомом этой проблемы является то, что URL-адреса работают, если они не включают расширение, но URL-адреса, включающие CSHTML или Vbhtml , не работают. Возможное решение — повторно включить расширения в файлеWeb.config сайта. В следующем примере показано, как включить расширение CSHTML .
<system.webServer>
<security>
<requestFiltering>
<fileExtensions>
<remove fileExtension=".cshtml" />
<add fileExtension=".cshtml" allowed="true" />
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>
Ошибка HTTP 404.8 — не найдена
Модуль фильтрации запросов настроен, чтобы запретить путь в URL-адресе, который содержит скрытый разделSegment.
Эта ошибка может возникать, если вы запрашиваете защищенный ресурс (например, файл Web.config ) или находится в защищенной папке (например, App_Data или App_Code).
Этот тип страницы не обслуживается (ошибка сервера в приложении /)
См. описание ошибки HTTP 404.17 ранее.
Проблемы с кодом Razor
Имя "class" не существует в текущем контексте
Часто эта ошибка возникает из-за того, что class ссылается на вспомогательный, но вспомогательный компонент не установлен. Например, если вы попытаетесь использовать вспомогательный компонент, но если вы не установили пакет из NuGet, вы увидите эту ошибку. Используйте коллекцию в WebMatrix, чтобы найти и установить вспомогательный элемент.
Если вспомогательный компонент установлен, но страница по-прежнему не распознает ее, попробуйте добавить using инструкцию в код. В инструкции using сошлитесь на пространство имен, включающему вспомогательную функцию. Например, базовые вспомогательные средства, которые находятся в пакете веб-вспомогательных приложений ASP.NET, находятся в System.Web.Helpers пространстве имен. В верхней части страницы, в которой вы хотите использовать вспомогательный элемент, добавьте следующую строку:
@using Microsoft.Web.Helpers;
Проблемы с безопасностью и членством
Если вы используете встроенную систему безопасности и управления членством в ASP.NET веб-страницах (Razor), могут возникнуть следующие проблемы.
Чтобы вызвать этот метод, свойство "Membership.Provider" должно быть экземпляром ExtendedMembershipProvider.
Эта ошибка может указывать на то, что AspNetSqlMembershipProvider класс не настроен. (Симптом заключается в том, что сайт работает хорошо локально, но выдает эту ошибку при публикации на сервере поставщика услуг размещения.) Одним из исправлений этой проблемы является явное включение простого членства, добавив следующее в файлWeb.config сайта:
<configuration>
<!-- other setting -->
<appSettings>
<add key="enableSimpleMembership" value="true" />
</appSettings>
<!-- other settings -->
</configuration>
Проблемы с отправкой электронной почты
Проблемы с отправкой электронной почты могут быть сложными для отладки. Начальная проблема может быть, что вы не можете подключиться к SMTP-серверу. Если подключение выполнено успешно, ASP.NET передает сообщение на SMTP-сервер. Однако могут возникнуть проблемы с самим сообщением, которые препятствуют его отправке сервером SMTP.
Если приложение не успешно отправляет сообщение электронной почты, попробуйте следующее:
- Имя SMTP-сервера часто выглядит как
smtp.provider.comилиsmtp.provider.net. Однако при публикации сайта у поставщика услуг размещения имя SMTP-сервера может бытьlocalhostв этот момент. Эта ситуация возникает, так как после публикации и запуска сайта на сервере поставщика SMTP-сервер может быть локальным с точки зрения приложения. Это изменение имен серверов может означать, что необходимо изменить имя SMTP-сервера в рамках процесса публикации. - Номер порта обычно равен 25. Однако для некоторых поставщиков требуется использовать порт 587 или другой порт. Обратитесь к владельцу SMTP-сервера, какой номер порта они ожидают, что вы будете использовать.
- Убедитесь, что вы используете правильные учетные данные. Если вы опубликовали свой сайт поставщику услуг размещения, используйте учетные данные, указанные поставщиком для электронной почты. Эти учетные данные могут отличаться от учетных данных, используемых для публикации.
- Иногда вам не нужны учетные данные. Если вы отправляете сообщение электронной почты с помощью личного поставщика услуг интернета, ваш поставщик электронной почты может уже знать свои учетные данные. После публикации может потребоваться использовать разные учетные данные, отличные от того, когда вы тестируете на локальном компьютере.
- Если ваш поставщик электронной почты использует шифрование, установите значение
WebMail.EnableSsltrue.
Если сообщение об ошибке отправляется по электронной почте, может появиться стандартное сообщение об ошибке ASP.NET, которое выглядит следующим образом:
Вы также можете отлаживать проблемы с отправкой электронной почты с помощью блока try-catch, как в следующем примере. При использовании блока try-catch, ASP.NET не отображает свои стандартные сообщения об ошибках. Вместо этого можно записать ошибку в catch части блока.
var errorMessage = "";
try {
// Initialize WebMail helper
WebMail.SmtpServer = "your-SMTP-server-name";
WebMail.SmtpPort = 25; // Or the port you've been told to use
WebMail.EnableSsl = false;
WebMail.UserName = "your-login-name";
WebMail.Password = "your-password";
WebMail.From = "your-from-address";
WebMail.Send(to: test-To-address,
subject: "Test email message",
body: "This is a debug email message"
);
}
catch (Exception ex ) {
errorMessage = ex.Message;
}
// Other code or markup here ...
<!-- In markup, add the following -->
@if(!errorMessage.IsEmpty()){
<p>@errorMessage</p>
}
Замените соответствующие значения your-SMTP-server-nameи т. д. Некоторые сообщения об ошибках могут отображаться следующим образом:
Сбой отправки почты.
–или–
Не удалось установить подключение, так как подключенная сторона не ответила в течение определенного времени, или установленное подключение оказалось неуспешным, поскольку подключенный узел не ответил
Эта ошибка обычно означает, что приложение не удалось подключиться к SMTP-серверу. Проверьте имя сервера и номер порта.
Почтовый ящик недоступен. Ответ сервера: 5.1.0 <someuser@invaliddomain> отправитель отклонен: недопустимый домен отправителя
Это сообщение может указать, что
Fromадрес не является правильным или отсутствует.Указанная строка не находится в форме, необходимой для адреса электронной почты.
Эта ошибка может указывать на то, что значение
ToилиFromсвойства не распознаются как адреса электронной почты. (ASP.NET не может проверить, является ли адрес электронной почты действительным, а только то, что он имеет правильный формат, например name@domain.com.)
Замечание
Удалите разметку, отображающую ошибку (@errorMessage) перед публикацией страницы на динамическом сайте. Это не рекомендуется, чтобы пользователи видели сообщения об ошибках, полученные с сервера.