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 las preguntas más frecuentes sobre ASP.NET Web pages (Razor).

Problemas con la ejecución de páginas

Una variedad de problemas 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 esta página con las credenciales proporcionadas.

Este error puede producirse si el servidor no está ejecutando la versión correcta del .NET Framework. Asegúrese de que el equipo que ejecuta el servidor (de forma local o remota) tiene al menos el .NET Framework 4 instalado. 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 del sitio y, después, en la vista de árbol, haga clic en configuración. En la lista seleccionar versión de .NET Framework , seleccione .net 4 (integrado) . Si ya se ha establecido esta versión, intente ejecutar WebMatrix como administrador.

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

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

Si tiene control sobre el servidor, asegúrese de que se está ejecutando la versión correcta del .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 el .NET Framework, IIS no se configurará correctamente para ejecutar páginas de ASP.NET). Para obtener más información, consulte ASP.net IIS registration Tool (Aspnet_regiis. exe).

Error HTTP 403,14-prohibido

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

Este error puede producirse si se solicita un recurso protegido (como el archivo Web. config ) o que se encuentra en una carpeta protegida (como la aplicación_datos o el código de_ de la aplicación).

Error HTTP 404,17-no encontrado

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

Este error puede producirse si el servidor no está configurado correctamente para usar el .NET Framework 4 o posterior y, por tanto, no reconoce el código de los bloques de @{ }. Vea la descripción anterior para http Error 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 se han bloqueado explícitamente las extensiones . cshtml o . vbhtml 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 ejemplo siguiente 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 se solicita un recurso protegido (como el archivo Web. config ) o que se encuentra en una carpeta protegida (como la aplicación_datos o el código de_ de la aplicación).

No se atiende este tipo de página (error de servidor en la aplicación '/')

Vea la descripción anterior para el error HTTP 404,17.

Problemas con código Razor

El nombre 'Class' no existe en el contexto actual

A menudo, un motivo por el que aparece este error es que class hace referencia a una aplicación auxiliar, pero el ayudante no está instalado. Por ejemplo, si intenta usar una aplicación auxiliar, pero si no ha instalado el paquete desde NuGet, verá este error. Use la galería de WebMatrix para buscar e instalar el ayudante.

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

@using Microsoft.Web.Helpers;

Problemas con la seguridad y la pertenencia

Si usa el sistema de seguridad integrado (pertenencia) en ASP.NET Web Pages (Razor), puede encontrar 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 de AspNetSqlMembershipProvider configurada. (Un síntoma es que el sitio funciona correctamente, pero genera 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>

Problemas con el envío de correo electrónico

Los problemas con el envío de correo electrónico pueden ser 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 mensaje que impide que el servidor SMTP lo envíe.

Si su aplicación no envía correo electrónico correctamente, intente lo siguiente:

  • El nombre del servidor SMTP suele ser similar smtp.provider.com o smtp.provider.net. Sin embargo, si publica el sitio en un proveedor de hospedaje, es posible que el nombre del servidor SMTP en ese momento sea localhost. Esta situación se produce porque, una vez publicado y el sitio se ejecuta en el servidor del proveedor, el servidor SMTP puede ser local desde la perspectiva de la aplicación. Este cambio en los nombres de servidor puede significar que debe cambiar el nombre del servidor SMTP como parte del proceso de publicación.
  • Normalmente, el número de puerto es 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 usar.
  • Asegúrese de usar las credenciales adecuadas. Si ha publicado el sitio en un proveedor de hospedaje, use las credenciales que el proveedor ha indicado específicamente como correo electrónico. Estas credenciales pueden ser diferentes de las credenciales que se usan para publicar.
  • En ocasiones, no se necesitan 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 deba usar credenciales diferentes a las que se deben probar en el equipo local.
  • Si el proveedor de correo electrónico usa el cifrado, establezca WebMail.EnableSsl en true.

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

Mensaje de error de ASP.NET cuando hay un problema con el correo electrónico

También puede depurar problemas con el envío de correo electrónico mediante el uso de un bloque try-catch, como en el ejemplo siguiente. 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 apropiados por your-SMTP-server-name, etc. Entre los mensajes de error que puede ver se incluyen los siguientes:

  • Error al enviar correo.

    o bien

    Error en un intento de conexión porque la parte conectada no respondió correctamente después de un período de tiempo, o bien se produjo un error en la conexión establecida porque el host conectado no respondió

    Este error normalmente significa que la aplicación no se pudo conectar 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 falta.

  • La cadena especificada no tiene el formato necesario para una dirección de correo electrónico.

    Este error podría indicar que el valor de las propiedades To o From no se reconoce 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 ).

Note

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 los mensajes de error que obtiene de un servidor.

Recursos adicionales

Preguntas frecuentes de ASP.NET Web Pages (Razor)

WebMatrix y ASP.NET Web pages Forum en el sitio web de ASP.net