Przewodnik rozwiązywania problemów ze wzorcem ASP.NET Web Pages (Razor)
– autor Tom FitzMacken
W tym artykule opisano problemy, które mogą występować podczas pracy z ASP.NET stronami internetowymi (Razor) i sugerowanymi rozwiązaniami.
Wersje oprogramowania
- ASP.NET Web Pages (Razor) 3
Ten samouczek współpracuje również z usługami ASP.NET Web Pages 2 i ASP.NET Web Pages 1.0.
Ten temat zawiera następujące sekcje:
- Problemy z uruchomionymi stronami
- Problemy z kodem Razor
- Problemy z zabezpieczeniami i członkostwem
- Problemy z wysyłaniem Email
- Dodatkowe zasoby
Aby uzyskać ogólne pytania, zobacz często zadawane pytania dotyczące stron internetowych ASP.NET (Razor).
Problemy z uruchomionymi stronami
Różne problemy mogą uniemożliwić prawidłowe działanie stron cshtml i vbhtml . W tej sekcji wymieniono typowe komunikaty o błędach i prawdopodobne przyczyny.
Błąd HTTP 403 — Zabronione: odmowa dostępu
Nie masz uprawnień do wyświetlania tego katalogu lub strony przy użyciu podanych poświadczeń.
Ten błąd może wystąpić, jeśli serwer nie korzysta z poprawnej wersji .NET Framework. Upewnij się, że na komputerze z uruchomionym serwerem (lokalnie lub zdalnie) zainstalowano co najmniej .NET Framework 4. Upewnij się również, że sama aplikacja jest skonfigurowana do uruchamiania odpowiedniej wersji.
Jeśli ten problem występuje lokalnie podczas pracy w programie WebMatrix, kliknij obszar roboczy Witryny , a następnie w widoku drzewa kliknij pozycję Ustawienia. Na liście Wybierz wersję .NET Framework wybierz pozycję .NET 4 (zintegrowane). Jeśli ta wersja jest już ustawiona, spróbuj uruchomić program WebMatrix jako administrator.
Upewnij się, że w katalogu głównym witryny internetowej jest co najmniej jeden plik cshtml .
Jeśli ten błąd występuje, gdy serwer internetowy znajduje się na serwerze zdalnym, skontaktuj się z administratorem serwera. Upewnij się, że serwer ma zainstalowany .NET Framework 4 lub nowszym. Upewnij się również, że aplikacja jest uruchomiona w puli aplikacji skonfigurowanej do korzystania z tej wersji programu the.NET Framework.
Jeśli masz kontrolę nad serwerem, upewnij się, że jest uruchomiona poprawna wersja .NET Framework. Możesz również spróbować naprawić instalację aspnet_regiis -iru
, uruchamiając polecenie . (Jeśli na przykład zainstalujesz usługi IIS po zainstalowaniu .NET Framework, usługi IIS nie będą poprawnie skonfigurowane do uruchamiania stron ASP.NET). Aby uzyskać więcej informacji, zobacz ASP.NET narzędzie rejestracji usług IIS (Aspnet_regiis.exe).
Błąd HTTP 403.14 — Zabronione
Serwer sieci Web jest skonfigurowany tak, aby nie wyświetlał zawartości tego katalogu.
Ten błąd może wystąpić, jeśli zażądasz zasobu chronionego (na przykład pliku Web.config ) lub w folderze chronionym (takim jak App_Data lub App_Code).
Błąd HTTP 404.17 — nie znaleziono
Żądana zawartość wydaje się być skryptem i nie będzie obsługiwana przez program obsługi plików statycznych.
Ten błąd może wystąpić, jeśli serwer nie jest poprawnie skonfigurowany do używania .NET Framework 4 lub nowszej, a zatem nie rozpoznaje kodu w @{ }
blokach. Zobacz opis wcześniej dla błędu HTTP 403 — Zabronione: odmowa dostępu.
Błąd HTTP 404.7 — nie znaleziono
Moduł filtrowania żądań jest skonfigurowany pod kątem odmowy rozszerzenia pliku
Ten błąd może wystąpić, jeśli rozszerzenia cshtml lub vbhtml zostały jawnie zablokowane na serwerze. Objawem tego problemu jest to, że adresy URL działają, gdy nie zawierają rozszerzenia, ale adresy URL, które zawierają plik cshtml lub vbhtml , nie działają. Możliwe rozwiązanie polega na ponownym włączeniu rozszerzeń w pliku Web.config witryny. W poniższym przykładzie pokazano, jak włączyć rozszerzenie cshtml .
<system.webServer>
<security>
<requestFiltering>
<fileExtensions>
<remove fileExtension=".cshtml" />
<add fileExtension=".cshtml" allowed="true" />
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>
Błąd HTTP 404.8 — nie znaleziono
Moduł filtrowania żądań jest skonfigurowany pod kątem odmowy ścieżki w adresie URL, który zawiera sekcję hiddenSegment.
Ten błąd może wystąpić, jeśli zażądasz zasobu chronionego (na przykład pliku Web.config ) lub w folderze chronionym (takim jak App_Data lub App_Code).
Ten typ strony nie jest obsługiwany (błąd serwera w aplikacji "/"
Zobacz opis wcześniej dla błędu HTTP 404.17.
Problemy z kodem Razor
Nazwa "class" nie istnieje w bieżącym kontekście
Często jest wyświetlany ten błąd, który class
odwołuje się do pomocnika, ale pomocnik nie jest zainstalowany. Jeśli na przykład spróbujesz użyć pomocnika, ale jeśli nie zainstalowano pakietu z narzędzia NuGet, ten błąd zostanie wyświetlony. Użyj galerii w programie WebMatrix, aby znaleźć i zainstalować pomocnika.
Jeśli pomocnik jest zainstalowany, ale strona nadal jej nie rozpoznaje, spróbuj dodać instrukcję using
do kodu. W instrukcji odwołaj using
się do przestrzeni nazw zawierającej pomocnika. Na przykład podstawowe pomocniki, które znajdują się w pakiecie ASP.NET Web Helpers, znajdują się w System.Web.Helpers
przestrzeni nazw. W górnej części strony, w której chcesz użyć pomocnika, dodaj następujący wiersz:
@using Microsoft.Web.Helpers;
Problemy z zabezpieczeniami i członkostwem
Jeśli używasz wbudowanego systemu zabezpieczeń (członkostwa) w ASP.NET Web Pages (Razor), mogą wystąpić następujące problemy.
Aby wywołać tę metodę, właściwość "Membership.Provider" musi być wystąpieniem "ExtendedMembershipProvider"
Ten błąd może wskazywać, że żadna klasa nie AspNetSqlMembershipProvider
jest skonfigurowana. (Objawem jest to, że witryna działa prawidłowo lokalnie, ale zgłasza ten błąd podczas publikowania go na serwerze dostawcy hostingu). Jedną z poprawek tego problemu jest jawne włączenie prostego członkostwa przez dodanie następujących elementów do pliku Web.config witryny:
<configuration>
<!-- other setting -->
<appSettings>
<add key="enableSimpleMembership" value="true" />
</appSettings>
<!-- other settings -->
</configuration>
Problemy z wysyłaniem Email
Problemy z wysyłaniem wiadomości e-mail mogą być trudne do debugowania. Początkowy problem może być taki, że nie można nawiązać połączenia z serwerem SMTP. Jeśli połączenie zakończy się pomyślnie, ASP.NET przekazuje komunikat do serwera SMTP. Mogą jednak wystąpić problemy z samym komunikatem uniemożliwiającym wysłanie go przez serwer SMTP.
Jeśli aplikacja nie wyśle pomyślnie wiadomości e-mail, spróbuj wykonać następujące czynności:
- Nazwa serwera SMTP jest często podobna do
smtp.provider.com
lubsmtp.provider.net
. Jeśli jednak opublikujesz witrynę u dostawcy hostingu, nazwa serwera SMTP w tym momencie może mieć wartośćlocalhost
. Taka sytuacja występuje, ponieważ po opublikowaniu i uruchomieniu witryny na serwerze dostawcy serwer SMTP może być lokalny z perspektywy aplikacji. Ta zmiana nazw serwerów może oznaczać, że musisz zmienić nazwę serwera SMTP w ramach procesu publikowania. - Numer portu to zwykle 25. Jednak niektórzy dostawcy wymagają użycia portu 587 lub innego portu. Sprawdź właściciela serwera SMTP o numerze portu, którego oczekujesz.
- Upewnij się, że używasz odpowiednich poświadczeń. Jeśli witryna została opublikowana u dostawcy hostingu, użyj poświadczeń wskazanych specjalnie przez dostawcę poczty e-mail. Te poświadczenia mogą różnić się od poświadczeń używanych do publikowania.
- Czasami nie potrzebujesz poświadczeń. Jeśli wysyłasz wiadomość e-mail przy użyciu osobistego dostawcy tożsamości, dostawca poczty e-mail może już znać swoje poświadczenia. Po opublikowaniu może być konieczne użycie różnych poświadczeń niż podczas testowania na komputerze lokalnym.
- Jeśli dostawca poczty e-mail używa szyfrowania, ustaw wartość
WebMail.EnableSsl
true
.
Jeśli występuje błąd podczas wysyłania wiadomości e-mail, może zostać wyświetlony standardowy komunikat o błędzie ASP.NET, który wygląda następująco:
Możesz również debugować problemy z wysyłaniem try-catch
wiadomości e-mail przy użyciu bloku, jak w poniższym przykładzie. Jeśli używasz try-catch
bloku, ASP.NET nie wyświetla standardowych komunikatów o błędach. Zamiast tego można przechwycić błąd w catch
części bloku.
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>
}
Zastąp odpowiednie wartości wartości , your-SMTP-server-name
itd. Niektóre komunikaty o błędach, które mogą zostać wyświetlone w ten sposób, obejmują następujące elementy:
Niepowodzenie wysyłania wiadomości e-mail.
-lub-
Próba połączenia nie powiodła się, ponieważ połączona strona nie odpowiedziała prawidłowo po upływie określonego czasu lub nawiązane połączenie nie powiodło się, ponieważ połączony host nie odpowiedział
Ten błąd zwykle oznacza, że aplikacja nie może nawiązać połączenia z serwerem SMTP. Sprawdź nazwę serwera i numer portu.
Skrzynka pocztowa jest niedostępna. Odpowiedź serwera: 5.1.0 <someuser@invaliddomain nadawca> odrzucił: nieprawidłowa domena nadawcy
Ten komunikat może wskazywać, że
From
adres nie jest poprawny lub brakuje go.Określony ciąg nie jest w postaci wymaganej dla adresu e-mail.
Ten błąd może wskazywać, że wartość
To
właściwości lubFrom
nie jest rozpoznawana jako adresy e-mail. (ASP.NET nie może sprawdzić, czy adres e-mail jest prawidłowy, tylko że jest w poprawnym formacie, na przykład name@domain.com.)
Uwaga
Usuń znaczniki, które wyświetla błąd (@errorMessage
) przed opublikowaniem strony w witrynie na żywo. Nie jest dobrym pomysłem, aby umożliwić użytkownikom wyświetlanie komunikatów o błędach uzyskanych z serwera.
Dodatkowe zasoby
ASP.NET Web Pages (Razor) — często zadawane pytania
Forum WebMatrix i ASP.NET Web Pages w witrynie internetowej ASP.NET