Guía de solución de problemas de ASP.NET Web Pages (Razor)

Por Tom FitzMacken

En este artículo se describen los problemas que puede tener al trabajar con ASP.NET Web Pages (Razor) y algunas soluciones sugeridas.

Versiones de software

  • ASP.NET Web Pages (Razor) 3

Este tutorial también funciona con ASP.NET Web Pages 2 y ASP.NET Web Pages 1.0.

Este tema contiene las siguientes secciones:

Para preguntas generales, consulte Preguntas más frecuentes sobre ASP.NET Web Pages (Razor).

Incidencias con las páginas en ejecución

Una variedad de incidencias puede impedir que las páginas .cshtml y .vbhtml se ejecuten correctamente. En esta sección se enumeran los mensajes de error comunes y las causas probables.

Error HTTP 403: Prohibido: acceso denegado

No tiene permiso para ver este directorio o página con las credenciales proporcionadas.

Este error puede producirse si el servidor no ejecuta la versión correcta de .NET Framework. Asegúrese de que el equipo que ejecuta el servidor (local o remotamente) tenga instalado al menos .NET Framework 4. Asegúrese también de que la propia aplicación está configurada para ejecutar la versión correcta.

Si ve este problema localmente mientras trabaja en WebMatrix, haga clic en el área de trabajo Sitio y, a continuación, en la vista de árbol, haga clic en Configuración. En la lista Seleccionar versión de .NET Framework, seleccione .NET 4 (integrado). Si esta versión ya está establecida, pruebe a ejecutar WebMatrix como administrador.

Asegúrese de que la raíz de su sitio web tiene al menos un archivo .cshtml.

Si ve este error cuando el servidor web está en un servidor remoto, póngase en contacto con el administrador del servidor. Asegúrese de que el servidor tiene instalado .NET Framework 4 o posterior. Asegúrese también de que la aplicación se ejecuta en un grupo de aplicaciones configurado para usar esa versión de .NET Framework.

Si tiene control sobre el servidor, asegúrese de que ejecuta la versión correcta de .NET Framework. También puede intentar reparar la instalación mediante la ejecución del comando aspnet_regiis -iru. (Por ejemplo, si instala IIS después de instalar .NET Framework, IIS no se configurará correctamente para ejecutar páginas ASP.NET). Para obtener más información, consulte Herramienta de registro de IIS de ASP.NET (Aspnet_regiis.exe).

Error HTTP 403.14: Prohibido

El servidor web está configurado para no enumerar el contenido de este directorio.

Este error puede producirse si solicita un recurso protegido (como el archivo web.config) o que se encuentra en una carpeta protegida (como App_Data o App_Code).

Error HTTP 404.17: no encontrado

El contenido solicitado parece ser script y el controlador de archivos estático no lo atenderá.

Este error puede producirse si el servidor no está configurado correctamente para usar .NET Framework 4 o posterior y, por tanto, no reconoce el código en bloques @{ } . Consulte la descripción anterior para Error HTTP 403: prohibido: acceso denegado.

Error HTTP 404.7: no encontrado

El módulo de filtrado de solicitudes está configurado para denegar la extensión de archivo

Este error puede producirse si .cshtml o extensiones de .vbhtml se han bloqueado explícitamente en el servidor. Un síntoma de este problema es que las direcciones URL funcionan cuando no incluyen la extensión, pero las direcciones URL que incluyen .cshtml o .vbhtml no funcionan. Una posible solución consiste en volver a habilitar las extensiones en el archivo Web.config del sitio. En el siguiente ejemplo se muestra cómo habilitar la extensión .cshtml.

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

Error HTTP 404.8: no encontrado

El módulo de filtrado de solicitudes está configurado para denegar una ruta de acceso en la dirección URL que contiene una sección hiddenSegment.

Este error puede producirse si solicita un recurso protegido (como el archivo web.config) o que se encuentra en una carpeta protegida (como App_Data o App_Code).

Este tipo de página no se sirve (error del servidor en la aplicación '/')

Consulte la descripción anterior del error HTTP 404.17.

Incidencias con el código de Razor

El nombre "clase" no existe en el contexto actual

A menudo, un motivo por el que ve este error es que class hace referencia a un asistente, pero el asistente no está instalado. Por ejemplo, si intenta usar un asistente, pero si no ha instalado el paquete desde NuGet, verá este error. Use la Galería en WebMatrix para buscar e instalar el asistente.

Si el asistente está instalado, pero la página todavía no la reconoce, intente agregar una instrucción using al código. En la instrucción using, haga referencia al espacio de nombres que incluye el asistente. Por ejemplo, los asistentes básicos que se encuentran en el paquete de asistentes web de ASP.NET se encuentran en el espacio de nombres System.Web.Helpers. En la parte superior de la página donde desea usar el asistente, agregue esta línea:

@using Microsoft.Web.Helpers;

Incidencias con seguridad y pertenencia

Si usa el sistema de seguridad integrado (pertenencia) en ASP.NET Web Pages (Razor), es posible que encuentre los siguientes problemas.

Para llamar a este método, la propiedad "Membership.Provider" debe ser una instancia de "ExtendedMembershipProvider"

Este error puede indicar que no hay ninguna clase AspNetSqlMembershipProvider configurada. (Un síntoma es que el sitio funciona correctamente localmente, pero produce este error al publicarlo en el servidor de un proveedor de hospedaje). Una solución para este problema es habilitar explícitamente la pertenencia simple agregando lo siguiente al archivo Web.config del sitio:

<configuration>

  <!-- other setting -->

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

  <!-- other settings -->

</configuration>

Incidencias con el envío de correo electrónico

Las incidencias con el envío de correo electrónico pueden resultar difíciles de depurar. Un problema inicial puede ser que no se puede conectar al servidor SMTP. Si la conexión se realiza correctamente, ASP.NET entrega el mensaje al servidor SMTP. Sin embargo, puede haber problemas con el propio mensaje que impide que el servidor SMTP lo envíe.

Si la aplicación no envía correctamente el correo electrónico, pruebe lo siguiente:

  • El nombre del servidor SMTP suele ser algo parecido a smtp.provider.com o smtp.provider.net. Sin embargo, si publica el sitio en un proveedor de hospedaje, el nombre del servidor SMTP en ese momento podría ser localhost. Esta situación se produce porque después de publicar y el sitio se ejecuta en el servidor del proveedor, el servidor SMTP podría ser local desde la perspectiva de la aplicación. Este cambio en los nombres de servidor puede significar que tiene que cambiar el nombre del servidor SMTP como parte del proceso de publicación.
  • El número de puerto suele ser 25. Sin embargo, algunos proveedores requieren que use el puerto 587 o algún otro puerto. Compruebe con el propietario del servidor SMTP el número de puerto que espera que use.
  • Asegúrese de usar las credenciales correctas. Si ha publicado el sitio en un proveedor de hospedaje, use las credenciales que el proveedor ha indicado específicamente para el correo electrónico. Estas credenciales pueden ser diferentes de las credenciales que se usan para publicar.
  • A veces no necesita credenciales. Si va a enviar correo electrónico mediante su ISP personal, es posible que el proveedor de correo electrónico ya conozca sus credenciales. Después de publicar, es posible que tenga que usar credenciales diferentes que al probar en el equipo local.
  • Si el proveedor de correo electrónico usa cifrado, establezca WebMail.EnableSsl en true.

Si hay un error al enviar correo electrónico, es posible que vea un mensaje de error de ASP.NET estándar, que tiene este aspecto:

ASP.NET error message when there is a problem with email

También puede depurar problemas con el envío de correo electrónico mediante un bloque try-catch, como en el siguiente ejemplo. Cuando se usa un bloque try-catch, ASP.NET no muestra sus mensajes de error estándar. En su lugar, puede capturar el error en la parte catch del bloque.

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

Sustituya los valores adecuados para your-SMTP-server-name, etc. Algunos de los mensajes de error que puede ver de esta manera incluyen lo siguiente:

  • Error al enviar correo.

    o bien

    Se produjo un error durante el intento de conexión ya que la parte conectada no respondió adecuadamente tras un período de tiempo, o bien se produjo un error en la conexión establecida ya que el host conectado no ha podido responder.

    Este error suele significar que la aplicación no pudo conectarse al servidor SMTP. Compruebe el nombre del servidor y el número de puerto.

  • buzón no disponible. La respuesta del servidor fue: 5.1.0 <someuser@invaliddomain> remitente rechazado: dominio de remitente no válido

    Este mensaje puede indicar que la dirección From no es correcta o que falta.

  • La cadena especificada no está en el formulario necesario para una dirección de correo electrónico.

    Este error puede indicar que el valor de las propiedades To o From no se reconocen como direcciones de correo electrónico. (ASP.NET no puede comprobar que la dirección de correo electrónico es válida, solo que está en el formato correcto, como name@domain.com).

Nota:

Quite el marcado que muestra el error (@errorMessage) antes de publicar la página en un sitio activo. No es una buena idea permitir que los usuarios vean mensajes de error que obtiene de un servidor.

Recursos adicionales

Preguntas frecuentes de ASP.NET Web Pages (Razor)

Foro de WebMatrix y ASP.NET Web Pages en el sitio web de ASP.NET