Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
, autor: Tom FitzMacken
Tento článek popisuje problémy, které můžete mít při práci s webovými stránkami ASP.NET (Razor), a některá navrhovaná řešení.
Verze softwaru
- ASP.NET Webové stránky (Razor) 3
Tento kurz funguje také s webovými stránkami ASP.NET 2 a webovými stránkami ASP.NET 1.0.
Toto téma obsahuje následující oddíly:
- Problémy se spuštěnými stránkami
- Problémy s kódem Razor
- Problémy se zabezpečením a členstvím
- Problémy s odesíláním Email
- Další zdroje informací
Obecné dotazy najdete v nejčastějších dotazech k webovým stránkám ASP.NET (Razor).
Problémy se spuštěnými stránkami
Stránky .cshtml a .vbhtml můžou bránit různým problémům, aby správně fungovaly. Tato část obsahuje seznam běžných chybových zpráv a pravděpodobné příčiny.
Chyba HTTP 403 – Zakázáno: Přístup byl odepřen
Nemáte oprávnění k zobrazení tohoto adresáře nebo stránky pomocí přihlašovacích údajů, které jste zadali.
K této chybě může dojít, pokud na serveru není spuštěna správná verze rozhraní .NET Framework. Ujistěte se, že počítač, na kterém běží server (místně nebo vzdáleně), má nainstalované rozhraní .NET Framework 4. Ujistěte se také, že samotná aplikace je nakonfigurovaná tak, aby spouštěla správnou verzi.
Pokud k tomuto problému dojde při práci v nástroji WebMatrix místně, klikněte na pracovní prostor Web a potom ve stromovém zobrazení klikněte na Nastavení. V seznamu Vybrat verzi rozhraní .NET Framework vyberte .NET 4 (integrované). Pokud už je tato verze nastavená, zkuste webMatrix spustit jako správce.
Ujistěte se, že kořenový adresář vašeho webu obsahuje alespoň jeden soubor .cshtml .
Pokud se tato chyba zobrazí, když je webový server na vzdáleném serveru, obraťte se na správce serveru. Ujistěte se, že je na serveru nainstalované rozhraní .NET Framework 4 nebo novější. Ujistěte se také, že aplikace běží ve fondu aplikací, který je nakonfigurovaný tak, aby používal danou verzi rozhraní the.NET Framework.
Pokud máte kontrolu nad serverem, ujistěte se, že používá správnou verzi rozhraní .NET Framework. Instalaci můžete také zkusit opravit spuštěním aspnet_regiis -iru příkazu . (Pokud například nainstalujete službu IIS po instalaci rozhraní .NET Framework, služba IIS nebude správně nakonfigurována tak, aby spouštěla ASP.NET stránky.) Další informace najdete v tématu ASP.NET nástroj pro registraci služby IIS (Aspnet_regiis.exe).
Chyba HTTP 403.14 – Zakázáno
Webový server je nakonfigurován tak, aby nevypisoval obsah tohoto adresáře.
K této chybě může dojít v případě, že požádáte o prostředek, který je chráněný (například souborWeb.config ) nebo který je ve složce, která je chráněná (například App_Data nebo App_Code).
Chyba HTTP 404.17 – Nenalezena
Požadovaný obsah se zdá být skriptem a obslužná rutina statického souboru ho nebude obsluhovat.
K této chybě může dojít, pokud server není správně nakonfigurován pro použití rozhraní .NET Framework 4 nebo novější, a proto nerozpozná kód v @{ } blocích. Projděte si popis chyby HTTP 403 – Zakázáno: Přístup byl odepřen.
Chyba HTTP 404.7 – Nenalezena
Modul filtrování požadavků je nakonfigurovaný tak, aby odepřel příponu souboru.
K této chybě může dojít, pokud jsou na serveru explicitně zablokovaná rozšíření .cshtml nebo .vbhtml . Příznakem tohoto problému je, že adresy URL fungují, když neobsahují příponu, ale adresy URL, které obsahují .cshtml nebo .vbhtml , nefungují. Možným řešením je opětovné povolení rozšíření v souboruWeb.config webu. Následující příklad ukazuje, jak povolit příponu .cshtml .
<system.webServer>
<security>
<requestFiltering>
<fileExtensions>
<remove fileExtension=".cshtml" />
<add fileExtension=".cshtml" allowed="true" />
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>
Chyba HTTP 404.8 – Nenalezena
Modul filtrování požadavků je nakonfigurovaný tak, aby odepřel cestu v adrese URL, která obsahuje oddíl hiddenSegment.
K této chybě může dojít v případě, že požádáte o prostředek, který je chráněný (například souborWeb.config ) nebo který je ve složce, která je chráněná (například App_Data nebo App_Code).
Tento typ stránky není obsluha (chyba serveru v aplikaci /)
Viz výše popis chyby HTTP 404.17.
Problémy s kódem Razor
Název "class" v aktuálním kontextu neexistuje.
Tato chyba se často zobrazuje proto, že class odkazuje na pomocnou rutinu, ale tato pomocná rutina není nainstalovaná. Pokud se například pokusíte použít pomocnou rutinu, ale nenainstalovali jste balíček z NuGetu, zobrazí se tato chyba. Pomocí galerie v nástroji WebMatrix vyhledejte a nainstalujte pomocnou rutinu.
Pokud je pomocná rutina nainstalovaná, ale stránka ji stále nerozpozná, zkuste do kódu přidat using příkaz . V příkazu using odkazujte na obor názvů, který obsahuje pomocnou rutinu. Například základní pomocné rutiny, které jsou v balíčku ASP.NET Web Helpers, jsou v System.Web.Helpers oboru názvů . Do horní části stránky, kde chcete pomocnou rutinu použít, přidejte tento řádek:
@using Microsoft.Web.Helpers;
Problémy se zabezpečením a členstvím
Pokud používáte integrovaný systém zabezpečení (členství) v ASP.NET Web Pages (Razor), může dojít k následujícím problémům.
Pokud chcete volat tuto metodu, vlastnost Membership.Provider musí být instancí ExtendedMembershipProvider.
Tato chyba může znamenat, že není nakonfigurovaná žádná AspNetSqlMembershipProvider třída. (Příznakem je, že web funguje správně místně, ale vyvolá tuto chybu, když ho publikujete na server poskytovatele hostingu.) Jedním z řešení tohoto problému je explicitně povolit jednoduché členství přidáním následujícího souboru Web.config webu:
<configuration>
<!-- other setting -->
<appSettings>
<add key="enableSimpleMembership" value="true" />
</appSettings>
<!-- other settings -->
</configuration>
Problémy s odesíláním Email
Problémy s odesíláním e-mailů může být náročné ladit. Počátečním problémem může být, že se nemůžete připojit k serveru SMTP. Pokud je připojení úspěšné, ASP.NET zprávu předá serveru SMTP. Může však docházet k problémům se samotnou zprávou, které brání serveru SMTP v jejím odeslání.
Pokud vaše aplikace úspěšně neodesílá e-mail, zkuste následující:
- Název serveru SMTP je často podobný
smtp.provider.comnebosmtp.provider.net. Pokud ale web publikujete u poskytovatele hostingu, název serveru SMTP v tomto okamžiku může býtlocalhost. K této situaci dochází proto, že po publikování a spuštění webu na serveru poskytovatele může být server SMTP z hlediska vaší aplikace místní. Tato změna názvů serverů může znamenat, že v rámci procesu publikování budete muset změnit název serveru SMTP. - Číslo portu je obvykle 25. Někteří poskytovatelé ale vyžadují, abyste používali port 587 nebo jiný port. Ověřte u vlastníka serveru SMTP, jaké číslo portu očekává, že budete používat.
- Ujistěte se, že používáte správné přihlašovací údaje. Pokud jste web publikovali u poskytovatele hostingu, použijte přihlašovací údaje, které poskytovatel výslovně uvedl, jsou určené pro e-mail. Tyto přihlašovací údaje se můžou lišit od přihlašovacích údajů, které používáte k publikování.
- Někdy přihlašovací údaje nepotřebujete vůbec. Pokud posíláte e-mail pomocí svého osobního poskytovatele internetových služeb, může váš poskytovatel e-mailu už znát vaše přihlašovací údaje. Po publikování možná budete muset použít jiné přihlašovací údaje než při testování na místním počítači.
- Pokud váš poskytovatel e-mailu používá šifrování, nastavte
WebMail.EnableSslnatrue.
Pokud při odesílání e-mailů dojde k chybě, může se zobrazit standardní ASP.NET chybová zpráva, která vypadá takto:
Problémy s odesíláním e-mailů můžete také ladit pomocí try-catch bloku, jako v následujícím příkladu. Pokud použijete try-catch blok, ASP.NET nezobrazí své standardní chybové zprávy. Místo toho můžete chybu zaznamenat v catch části 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>
}
Nahraďte příslušnými hodnotami a your-SMTP-server-nametak dále. Mezi chybové zprávy, které se můžou zobrazit tímto způsobem, patří:
Při odesílání pošty došlo k chybě.
-nebo-
Pokus o připojení selhal, protože připojená strana po určité době řádně neodpověděla, nebo došlo k selhání navázaného připojení, protože připojený hostitel neodpověděl.
Tato chyba obvykle znamená, že se aplikace nemohla připojit k serveru SMTP. Zkontrolujte název serveru a číslo portu.
Poštovní schránka není k dispozici. Odpověď serveru byla: 5.1.0 <someuser@invaliddomain> odesílatel odmítnut: neplatná doména odesílatele
Tato zpráva může znamenat, že
Fromadresa není správná nebo chybí.Zadaný řetězec není ve formátu požadovaném pro e-mailovou adresu.
Tato chyba může znamenat, že hodnota
Tovlastností neboFromse nerozpoznala jako e-mailové adresy. (ASP.NET nemůže zkontrolovat, jestli je e-mailová adresa platná, ale že je ve správném formátu, například name@domain.com.)
Poznámka
Před publikováním stránky na živý web odeberte kód, který zobrazuje chybu (@errorMessage). Není vhodné, aby se uživatelům zobrazovaly chybové zprávy, které se zobrazují ze serveru.
Další materiály
Webové stránky ASP.NET (Razor) – časté otázky
Fórum WebMatrix a ASP.NET Web Pages na webu ASP.NET