Поделиться через


Руководство по устранению неполадок веб-страниц ASP.NET (Razor)

; автор — Том ФитцМакен (Tom FitzMacken)

В этой статье описываются проблемы, которые могут возникнуть при работе с веб-страницы ASP.NET (Razor) и некоторые предлагаемые решения.

Версии программного обеспечения

  • веб-страницы ASP.NET (Razor) 3

Это руководство также работает с веб-страницы ASP.NET 2 и веб-страницы ASP.NET 1.0.

Этот раздел состоит из следующих подразделов.

Общие вопросы см. в разделе вопросы и ответы по веб-страницы 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, они не будут правильно настроены для запуска 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-адресе, который содержит раздел hiddenSegment.

Эта ошибка может возникнуть при запросе защищенного ресурса (например , файла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>

Проблемы с отправкой Email

Проблемы с отправкой электронной почты могут быть сложными для отладки. Первоначальная проблема может быть связана с тем, что вы не можете подключиться к SMTP-серверу. Если подключение установлено успешно, ASP.NET передает сообщение SMTP-серверу. Однако могут возникнуть проблемы с самим сообщением, которые не позволяют SMTP-серверу отправить его.

Если приложение не успешно отправляет электронную почту, попробуйте выполнить следующие действия:

  • Имя SMTP-сервера часто имеет вид smtp.provider.com или smtp.provider.net. Однако при публикации сайта у поставщика услуг размещения имя SMTP-сервера на этом этапе может иметь значение localhost. Эта ситуация возникает из-за того, что после публикации и запуска сайта на сервере поставщика SMTP-сервер может быть локальным с точки зрения вашего приложения. Это изменение имен серверов может означать, что необходимо изменить имя SMTP-сервера в процессе публикации.
  • Обычно номер порта — 25. Однако для некоторых поставщиков требуется использовать порт 587 или другой порт. Уточните у владельца SMTP-сервера номер порта, который он ожидает использовать.
  • Убедитесь, что вы используете правильные учетные данные. Если вы опубликовали свой сайт у поставщика услуг размещения, используйте учетные данные, указанные поставщиком, для электронной почты. Эти учетные данные могут отличаться от учетных данных, используемых для публикации.
  • Иногда вам вообще не нужны учетные данные. Если вы отправляете электронную почту с помощью личного поставщика услуг Интернета, ваш поставщик услуг электронной почты может уже знать ваши учетные данные. После публикации может потребоваться использовать учетные данные, отличные от учетных данных при тестировании на локальном компьютере.
  • Если поставщик услуг электронной почты использует шифрование, задайте для значение WebMail.EnableSsltrue.

При возникновении ошибки при отправке сообщения электронной почты может появиться стандартное ASP.NET сообщение об ошибке, которое выглядит следующим образом:

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), перед публикацией страницы на активном сайте. Не рекомендуется разрешать пользователям видеть сообщения об ошибках, которые вы получаете с сервера.

Дополнительные ресурсы

Вопросы и ответы по веб-страницам ASP.NET (Razor)

Форум WebMatrix и веб-страницы ASP.NET на веб-сайте ASP.NET