Guida alla risoluzione dei problemi delle pagine Web ASP.NET (Razor)
Questo articolo descrive i problemi che potrebbero verificarsi quando si usa Pagine Web ASP.NET (Razor) e alcune soluzioni suggerite.
Versioni software
- Pagine Web ASP.NET (Razor) 3
Questa esercitazione funziona anche con Pagine Web ASP.NET 2 e Pagine Web ASP.NET 1.0.
In questo argomento sono incluse le sezioni seguenti:
- Problemi relativi all'esecuzione di pagine
- Problemi con Razor Code
- Problemi relativi alla sicurezza e all'appartenenza
- Problemi relativi all'invio di Email
- Risorse aggiuntive
Per domande generali, vedere domande frequenti Pagine Web ASP.NET (Razor).
Problemi relativi all'esecuzione di pagine
Un'ampia gamma di problemi può impedire l'esecuzione corretta delle pagine con estensione cshtml e vbhtml . Questa sezione elenca i messaggi di errore comuni e probabilmente causa.
Errore HTTP 403 - Non consentito: l'accesso viene negato
Non si dispone dell'autorizzazione per visualizzare questa directory o pagina usando le credenziali fornite.
Questo errore può verificarsi se il server non esegue la versione corretta di .NET Framework. Assicurarsi che il computer che esegue il server (in locale o in remoto) abbia installato almeno .NET Framework 4. Assicurarsi anche che l'applicazione stessa sia configurata per eseguire la versione corretta.
Se si verifica questo problema in locale durante l'uso in WebMatrix, fare clic sull'area di lavoro Sito e quindi nella visualizzazione albero fare clic su Impostazioni. Nell'elenco Seleziona versione di .NET Framework selezionare .NET 4 (Integrato). Se questa versione è già impostata, provare a eseguire WebMatrix come amministratore.
Assicurarsi che la radice del sito Web abbia almeno un file cshtml in esso.
Se viene visualizzato questo errore quando il server Web si trova in un server remoto, contattare l'amministratore del server. Assicurarsi che il server abbia installato .NET Framework 4 o versione successiva. Assicurarsi inoltre che l'applicazione sia in esecuzione in un pool di applicazioni configurato per l'uso di tale versione di the.NET Framework.
Se si ha il controllo sul server, assicurarsi che sia in esecuzione la versione corretta di .NET Framework. È anche possibile provare a ripristinare l'installazione eseguendo il aspnet_regiis -iru
comando . Ad esempio, se si installa IIS dopo l'installazione di .NET Framework, IIS non sarà configurato correttamente per l'esecuzione di pagine ASP.NET. Per altre informazioni, vedere ASP.NET IIS Registration Tool (Aspnet_regiis.exe).
Errore HTTP 403.14 - Non consentito
Il server Web è configurato per non elencare il contenuto di questa directory.
Questo errore può verificarsi se si richiede una risorsa protetta (ad esempio il file Web.config ) o in una cartella protetta,ad esempio App_Data o App_Code.
Errore HTTP 404.17 - Non trovato
Il contenuto richiesto viene visualizzato come script e non verrà servito dal gestore di file statici.
Questo errore può verificarsi se il server non è configurato correttamente per l'uso di .NET Framework 4 o versione successiva e pertanto non riconosce il codice nei @{ }
blocchi. Vedere la descrizione precedente per l'errore HTTP 403 - Non consentito: l'accesso viene negato.
Errore HTTP 404.7 - Non trovato
Il modulo di filtro delle richieste è configurato per negare l'estensione del file
Questo errore può verificarsi se le estensioni con estensione cshtml o vbhtml sono state bloccate in modo esplicito nel server. Un sintomo di questo problema è che gli URL funzionano quando non includono l'estensione, ma gli URL che includono .cshtml o .vbhtml non funzionano. Una possibile soluzione consiste nel riabilitare le estensioni nel file di Web.config del sito. Nell'esempio seguente viene illustrato come abilitare l'estensione cshtml .
<system.webServer>
<security>
<requestFiltering>
<fileExtensions>
<remove fileExtension=".cshtml" />
<add fileExtension=".cshtml" allowed="true" />
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>
Errore HTTP 404.8 - Non trovato
Il modulo di filtro delle richieste è configurato per negare un percorso nell'URL contenente una sezione hiddenSegment.
Questo errore può verificarsi se si richiede una risorsa protetta (ad esempio il file Web.config ) o in una cartella protetta,ad esempio App_Data o App_Code.
Questo tipo di pagina non viene servito (Errore del server in '/' Applicazione)
Vedere la descrizione precedente per l'errore HTTP 404.17.
Problemi con il codice Razor
Il nome 'class' non esiste nel contesto corrente
Spesso, un motivo per cui viene visualizzato questo errore è che class
fa riferimento a un helper, ma l'helper non è installato. Ad esempio, se si tenta di usare un helper, ma se non è stato installato il pacchetto da NuGet, verrà visualizzato questo errore. Usare la raccolta in WebMatrix per trovare e installare l'helper.
Se l'helper è installato, ma la pagina non lo riconosce ancora, provare ad aggiungere un'istruzione using
al codice. Nell'istruzione fare riferimento allo spazio dei nomi che include l'helper using
. Ad esempio, gli helper di base presenti nel pacchetto helper Web ASP.NET si trovano nello System.Web.Helpers
spazio dei nomi. Nella parte superiore della pagina in cui si vuole usare l'helper, aggiungere questa riga:
@using Microsoft.Web.Helpers;
Problemi relativi alla sicurezza e all'appartenenza
Se si usa il sistema di sicurezza (appartenenza) predefinito in Pagine Web ASP.NET (Razor), è possibile che si verifichino i problemi seguenti.
Per chiamare questo metodo, la proprietà "Membership.Provider" deve essere un'istanza di "ExtendedMembershipProvider"
Questo errore può indicare che non è configurata alcuna AspNetSqlMembershipProvider
classe. Un sintomo è che il sito funziona in locale, ma genera questo errore quando lo si pubblica nel server del provider di hosting. Una soluzione per questo problema consiste nell'abilitare in modo esplicito l'appartenenza semplice aggiungendo quanto segue al file diWeb.config del sito:
<configuration>
<!-- other setting -->
<appSettings>
<add key="enableSimpleMembership" value="true" />
</appSettings>
<!-- other settings -->
</configuration>
Problemi relativi all'invio di Email
I problemi relativi all'invio di posta elettronica possono risultare difficili da eseguire nel debug. Un problema iniziale può essere che non è possibile connettersi al server SMTP. Se la connessione ha esito positivo, ASP.NET passa il messaggio al server SMTP. Tuttavia, è possibile che si verifichino problemi con il messaggio stesso che impedisce al server SMTP di inviarlo.
Se l'applicazione non invia correttamente un messaggio di posta elettronica, provare quanto segue:
- Il nome del server SMTP è spesso simile
smtp.provider.com
osmtp.provider.net
. Tuttavia, se si pubblica il sito in un provider di hosting, il nome del server SMTP a quel punto potrebbe esserelocalhost
. Questa situazione si verifica perché dopo aver pubblicato e il sito è in esecuzione nel server del provider, il server SMTP potrebbe essere locale dal punto di vista dell'applicazione. Questa modifica nei nomi dei server potrebbe significare che è necessario modificare il nome del server SMTP come parte del processo di pubblicazione. - Il numero di porta è in genere 25. Tuttavia, alcuni provider richiedono di usare la porta 587 o alcune altre porte. Verificare con il proprietario del server SMTP il numero di porta che si prevede di usare.
- Assicurarsi di usare le credenziali corrette. Se il sito è stato pubblicato in un provider di hosting, usare le credenziali indicate in modo specifico dal provider per la posta elettronica. Queste credenziali potrebbero essere diverse dalle credenziali usate per la pubblicazione.
- A volte non sono necessarie credenziali. Se si invia un messaggio di posta elettronica usando l'ISP personale, il provider di posta elettronica potrebbe conoscere già le credenziali. Dopo la pubblicazione, potrebbe essere necessario usare credenziali diverse rispetto a quando si esegue il test nel computer locale.
- Se il provider di posta elettronica usa la crittografia, impostare
WebMail.EnableSsl
sutrue
.
Se si verifica un errore durante l'invio di posta elettronica, potrebbe essere visualizzato un messaggio di errore standard ASP.NET, simile al seguente:
È anche possibile eseguire il debug dei problemi relativi all'invio di posta elettronica usando un try-catch
blocco, come nell'esempio seguente. Quando si usa un try-catch
blocco, ASP.NET non visualizza i messaggi di errore standard. È invece possibile acquisire l'errore nella catch
parte del blocco.
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>
}
Sostituire i valori appropriati per your-SMTP-server-name
e così via. Alcuni dei messaggi di errore visualizzati in questo modo includono quanto segue:
Errore durante l'invio di posta elettronica.
-oppure-
Impossibile stabilire la connessione. Risposta non corretta della parte connessa dopo un intervallo di tempo oppure mancata risposta dall'host collegato
Questo errore indica in genere che l'applicazione non è riuscita a connettersi al server SMTP. Controllare il nome del server e il numero di porta.
Mailbox unavailable. La risposta del server è stata: 5.1.0 <someuser@invaliddomain> mittente rifiutato: dominio mittente non valido
Questo messaggio può indicare che l'indirizzo
From
non è corretto o mancante.La stringa specificata non è nel formato richiesto per un indirizzo di posta elettronica.
Questo errore potrebbe indicare che il valore delle
To
proprietà oFrom
non viene riconosciuto come indirizzi di posta elettronica. (ASP.NET non è possibile verificare che l'indirizzo di posta elettronica sia valido, solo che sia nel formato corretto, ad esempio name@domain.com.)
Nota
Rimuovere il markup che visualizza l'errore (@errorMessage
) prima di pubblicare la pagina in un sito live. Non è consigliabile consentire agli utenti di visualizzare i messaggi di errore ricevuti da un server.
Risorse aggiuntive
Domande frequenti sulle pagine Web ASP.NET (Razor)
WebMatrix e Pagine Web ASP.NET forum sul sito Web ASP.NET