Partilhar via


Guia de solução de problemas de Páginas da Web do ASP.NET (Razor)

por Tom FitzMacken

Este artigo descreve os problemas que você pode ter ao trabalhar com Páginas da Web do ASP.NET (Razor) e algumas soluções sugeridas.

Versões de software

  • Páginas da Web do ASP.NET (Razor) 3

Este tutorial também funciona com Páginas da Web do ASP.NET 2 e Páginas da Web do ASP.NET 1.0.

Este tópico contém as seguintes seções:

Para perguntas gerais, consulte perguntas frequentes sobre Páginas da Web do ASP.NET (Razor).

Problemas com páginas em execução

Uma variedade de problemas pode impedir que as páginas .cshtml e .vbhtml sejam executadas corretamente. Esta seção lista mensagens de erro comuns e causas prováveis.

Erro HTTP 403 – Proibido: Acesso negado

Você não tem permissão para exibir este diretório ou página usando as credenciais fornecidas.

Esse erro poderá ocorrer se o servidor não estiver executando a versão correta do .NET Framework. Verifique se o computador que está executando o servidor (local ou remotamente) tem pelo menos o .NET Framework 4 instalado. Verifique também se o próprio aplicativo está configurado para executar a versão correta.

Se você vir esse problema localmente enquanto trabalha no WebMatrix, clique no workspace Site e, no modo de exibição de árvore, clique em Configurações. Na lista Selecionar versão .NET Framework, selecione .NET 4 (Integrado). Se essa versão já estiver definida, tente executar o WebMatrix como administrador.

Verifique se a raiz do seu site tem pelo menos um arquivo .cshtml .

Se você vir esse erro quando o servidor Web estiver em um servidor remoto, entre em contato com o administrador do servidor. Verifique se o servidor tem o .NET Framework 4 ou posterior instalado. Verifique também se o aplicativo está em execução em um pool de aplicativos configurado para usar essa versão do the.NET Framework.

Se você tiver controle sobre o servidor, verifique se ele está executando a versão correta do .NET Framework. Você também pode tentar reparar a instalação executando o aspnet_regiis -iru comando . (Por exemplo, se você instalar o IIS depois de instalar o .NET Framework, o IIS não será configurado corretamente para executar ASP.NET páginas.) Para obter mais informações, consulte ASP.NET Ferramenta de Registro do IIS (Aspnet_regiis.exe).

Erro HTTP 403.14 – Proibido

O servidor Web está configurado para não listar o conteúdo desse diretório.

Esse erro pode ocorrer se você solicitar um recurso protegido (como o arquivo Web.config ) ou que esteja em uma pasta protegida (como App_Data ou App_Code).

Erro HTTP 404.17 – Não encontrado

O conteúdo solicitado parece ser um script e não será atendido pelo manipulador de arquivos estáticos.

Esse erro poderá ocorrer se o servidor não estiver configurado corretamente para usar o .NET Framework 4 ou posterior e, portanto, não reconhecer o código em @{ } blocos. Consulte a descrição anterior para Erro HTTP 403 – Proibido: Acesso negado.

Erro HTTP 404.7 – Não encontrado

O módulo de filtragem de solicitação está configurado para negar a extensão de arquivo

Esse erro poderá ocorrer se as extensões .cshtml ou .vbhtml tiverem sido explicitamente bloqueadas no servidor. Um sintoma desse problema é que as URLs funcionam quando não incluem a extensão, mas as URLs que incluem .cshtml ou .vbhtml não funcionam. Uma solução possível é reabilitar as extensões no arquivo Web.config do site. O exemplo a seguir mostra como habilitar a extensão .cshtml .

<system.webServer>
  <security>
   <requestFiltering>
     <fileExtensions>
       <remove fileExtension=".cshtml" />
       <add fileExtension=".cshtml" allowed="true" />
     </fileExtensions>
    </requestFiltering>
  </security>
</system.webServer>

Erro HTTP 404.8 – Não encontrado

O módulo de filtragem de solicitação está configurado para negar um caminho na URL que contém uma seção hiddenSegment.

Esse erro pode ocorrer se você solicitar um recurso protegido (como o arquivo Web.config ) ou que esteja em uma pasta protegida (como App_Data ou App_Code).

Esse tipo de página não é atendido (Erro do Servidor no aplicativo '/')

Consulte a descrição anterior do Erro HTTP 404.17.

Problemas com o código Razor

O nome 'class' não existe no contexto atual

Geralmente, um motivo pelo qual você vê esse erro é que class faz referência a um auxiliar, mas o auxiliar não está instalado. Por exemplo, se você tentar usar um auxiliar, mas se não tiver instalado o pacote do NuGet, verá esse erro. Use a Galeria no WebMatrix para localizar e instalar o auxiliar.

Se o auxiliar estiver instalado, mas a página ainda não a reconhecer, tente adicionar uma using instrução ao código. Na instrução using , faça referência ao namespace que inclui o auxiliar. Por exemplo, os auxiliares básicos que estão no pacote ASP.NET Web Helpers estão no System.Web.Helpers namespace . Na parte superior da página em que você deseja usar o auxiliar, adicione esta linha:

@using Microsoft.Web.Helpers;

Problemas com segurança e associação

Se você estiver usando o sistema interno de segurança (associação) no Páginas da Web do ASP.NET (Razor), poderá encontrar os problemas a seguir.

Para chamar esse método, a propriedade "Membership.Provider" deve ser uma instância de "ExtendedMembershipProvider"

Esse erro pode indicar que nenhuma AspNetSqlMembershipProvider classe está configurada. (Um sintoma é que o site funciona bem localmente, mas lança esse erro quando você o publica no servidor de um provedor de hospedagem.) Uma correção para esse problema é habilitar explicitamente a associação simples adicionando o seguinte ao arquivo Web.config do site:

<configuration>

  <!-- other setting -->

  <appSettings>
    <add key="enableSimpleMembership" value="true" />
  </appSettings>

  <!-- other settings -->

</configuration>

Problemas com o envio de Email

Problemas com o envio de emails podem ser desafiadores para depuração. Um problema inicial pode ser que você não pode se conectar ao servidor SMTP. Se a conexão for bem-sucedida, ASP.NET a mensagem será enviada para o servidor SMTP. No entanto, pode haver problemas com a própria mensagem que impede o servidor SMTP de enviá-la.

Se o aplicativo não enviar email com êxito, tente o seguinte:

  • O nome do servidor SMTP geralmente é algo como smtp.provider.com ou smtp.provider.net. No entanto, se você publicar seu site em um provedor de hospedagem, o nome do servidor SMTP nesse ponto poderá ser localhost. Essa situação ocorre porque depois que você publica e seu site está em execução no servidor do provedor, o servidor SMTP pode ser local da perspectiva do seu aplicativo. Essa alteração nos nomes do servidor pode significar que você precisa alterar o nome do servidor SMTP como parte do processo de publicação.
  • O número da porta geralmente é 25. No entanto, alguns provedores exigem que você use a porta 587 ou alguma outra porta. Verifique com o proprietário do servidor SMTP qual número de porta ele espera que você use.
  • Certifique-se de usar as credenciais corretas. Se você publicou seu site em um provedor de hospedagem, use as credenciais indicadas especificamente pelo provedor para email. Essas credenciais podem ser diferentes das credenciais que você usa para publicar.
  • Às vezes, você não precisa de credenciais. Se você estiver enviando emails usando seu ISP pessoal, seu provedor de email talvez já saiba suas credenciais. Depois de publicar, talvez seja necessário usar credenciais diferentes do que quando você testa em seu computador local.
  • Se o provedor de email usar criptografia, defina WebMail.EnableSsl como true.

Se houver um erro ao enviar email, você poderá ver uma mensagem de erro de ASP.NET padrão, que tem esta aparência:

ASP.NET mensagem de erro quando há um problema com o email

Você também pode depurar problemas com o envio de email usando um try-catch bloco, como no exemplo a seguir. Quando você usa um try-catch bloco, ASP.NET não exibe suas mensagens de erro padrão. Em vez disso, você pode capturar o erro na catch parte do bloco.

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>
}

Substitua os valores apropriados por your-SMTP-server-namee assim por diante. Algumas das mensagens de erro que você pode ver dessa forma incluem o seguinte:

  • Falha ao enviar emails.

    -ou-

    Falha na tentativa de conexão porque a parte conectada não respondeu corretamente após um período de tempo ou a conexão estabelecida falhou porque o host conectado não respondeu

    Esse erro geralmente significa que o aplicativo não pôde se conectar ao servidor SMTP. Verifique o nome do servidor e o número da porta.

  • Caixa de correio não disponível. A resposta do servidor foi: 5.1.0 <someuser@invaliddomain> remetente rejeitado: domínio remetente inválido

    Essa mensagem pode indicar que o From endereço não está correto ou está ausente.

  • A cadeia de caracteres especificada não está no formulário necessário para um endereço de email.

    Esse erro pode indicar que o valor das To propriedades ou From não são reconhecidos como endereços de email. (ASP.NET não pode marcar que o endereço de email é válido, apenas que ele está no formato correto, como name@domain.com.)

Observação

Remova a marcação que exibe o erro (@errorMessage) antes de publicar a página em um site ativo. Não é uma boa ideia permitir que os usuários vejam mensagens de erro que você obtém de um servidor.

Recursos adicionais

Perguntas frequentes sobre Páginas da Web do ASP.NET (Razor)

WebMatrix e fórum de Páginas da Web do ASP.NET no site do ASP.NET