Notas de la versión de ASP.NET MVC 4

En este documento se describe la versión de ASP.NET MVC 4.

installation notes (Nota de compatibilidad de SAP n.º 1984787: Notas de instalación de SUSE Linux Enterprise Server 12)

ASP.NET MVC 4 para Visual Studio 2010 se puede instalar desde la página principal de ASP.NET MVC 4 mediante el Instalador de plataforma web.

Para instalar ASP.NET MVC 4, se recomienda desinstalar las versiones preliminares instaladas anteriores. Puede actualizar ASP.NET MVC 4 Beta y la versión candidata para lanzamiento de ASP.NET MVC 4 sin desinstalarlas.

Esta versión no es compatible con ninguna versión preliminar de .NET Framework 4.5. Debe actualizar por separado las versiones preliminares instaladas de .NET Framework 4.5 a la versión final antes de instalar ASP.NET MVC 4.

ASP.NET MVC 4 se puede instalar y ejecutar en paralelo con ASP.NET MVC 3.

Documentación

La documentación de ASP.NET MVC está disponible en el sitio web de MSDN en la siguiente dirección URL:

https://go.microsoft.com/fwlink/?LinkID=243043

Hay disponibles tutoriales y otra información sobre ASP.NET MVC en la página de MVC 4 del sitio web de ASP.NET (https://www.asp.net/mvc/mvc4).

Soporte técnico

ASP.NET MVC 4 es totalmente compatible. Si tiene alguna pregunta sobre cómo trabajar con esta versión, también puede publicarla en el foro de ASP.NET MVC (https://forums.asp.net/1146.aspx), donde los miembros de la comunidad de ASP.NET a menudo pueden proporcionar soporte informal.

Requisitos de software

Los componentes de ASP.NET MVC 4 para Visual Studio requieren PowerShell 2.0 y, además, Visual Studio 2010 con Service Pack 1 o Visual Web Developer Express 2010 con Service Pack 1.

Nuevas características de ASP.NET MVC 4

En esta sección se describen las características que se han introducido en la versión ASP.NET MVC 4.

ASP.NET Web API

ASP.NET MVC 4 incluye ASP.NET Web API, un nuevo marco para crear servicios HTTP que pueden llegar a una amplia gama de clientes, incluidos exploradores y dispositivos móviles. ASP.NET Web API es una plataforma ideal para desarrollar también servicios de RESTful.

ASP.NET Web API incluye compatibilidad con las siguientes características:

  • Modelo de programación HTTP moderno: Acceda directamente y manipule las solicitudes y respuestas HTTP en las API web mediante un nuevo modelo de objetos HTTP fuertemente tipado. El mismo modelo de programación y canalización HTTP está disponible simétricamente en el cliente a través del nuevo tipo HttpClient.
  • Compatibilidad completa con rutas: ASP.NET Web API admite el conjunto completo de funcionalidades de ruta de enrutamiento ASP.NET, incluidos los parámetros de ruta y las restricciones. Además, use convenciones sencillas para asignar acciones a métodos HTTP.
  • Negociación de contenido: El cliente y el servidor pueden funcionar conjuntamente para determinar el formato adecuado de los datos que se devuelven desde una API web. ASP.NET Web API proporciona compatibilidad predeterminada con formatos codificados con URL de formulario, JSON y XML, que puede ampliar agregando formateadores propios o incluso reemplazar la estrategia de negociación de contenido predeterminada.
  • Enlace de modelos y validación: Los enlazadores de modelos proporcionan una manera sencilla de extraer datos de varias partes de una solicitud HTTP y convierten esos elementos de mensaje en objetos .NET que las acciones de la API web pueden usar. La validación también se hace en parámetros de acción basados en la anotación de datos.
  • Filtros: ASP.NET Web API admite filtros, incluidos filtros conocidos, como el atributo [Authorize]. Puede crear y conectar sus propios filtros para acciones, autorización y control de excepciones.
  • Composición de consultas: Use el atributo de filtros [Queryable] en una acción que devuelve IQueryable para habilitar la compatibilidad con la consulta de la API web a través de las convenciones de consulta de OData.
  • Comprobación mejorada: En lugar de establecer detalles HTTP en objetos de contexto estáticos, las acciones de API web funcionan con instancias de HttpRequestMessage y HttpResponseMessage. Cree un proyecto de prueba unitaria junto con el proyecto de API web para empezar a escribir rápidamente pruebas unitarias para la funcionalidad de la API web.
  • Configuración basada en código: La configuración de ASP.NET Web API se hace únicamente a través del código, dejando limpios los archivos de configuración. Use el patrón del localizador de servicios proporcionado para configurar puntos de extensibilidad.
  • Compatibilidad mejorada con contenedores de inversión de control (IoC): ASP.NET Web API proporciona una gran compatibilidad con contenedores de IoC a través de una abstracción mejorada del solucionador de dependencias.
  • Autohospedaje: Las API web se pueden hospedar en su propio proceso, además de IIS, mientras siguen usando toda la eficacia de las rutas y otras características de la API web.
  • Creación de páginas de prueba y ayuda personalizadas: Ahora puede crear fácilmente páginas de ayuda y pruebas personalizadas para las API web mediante el nuevo servicio IApiExplorer para obtener una descripción completa del runtime de las API web.
  • Supervisión y diagnóstico: ASP.NET Web API ahora proporciona una infraestructura de seguimiento ligera que facilita la integración con soluciones de registro existentes, como System.Diagnostics, ETW y marcos de registro de terceros. Puede habilitar el seguimiento con una implementación de ITraceWriter y agregándola a la configuración de la API web.
  • Generación de vínculos: Use la UrlHelper de ASP.NET Web API para generar vínculos en recursos relacionados de la misma aplicación.
  • Plantilla de proyecto de API web: Seleccione el nuevo proyecto de API web del nuevo asistente de proyectos de MVC 4 para ponerse en marcha rápidamente con ASP.NET Web Api.
  • Andamiaje: Use el cuadro de diálogo Agregar controlador para aplicar el andamiaje rápidamente a un controlador de API web a partir de un tipo de modelo basado en Entity Framework.

Para obtener más información sobre ASP.NET Web API, visite https://www.asp.net/web-api.

Mejoras en las plantillas de proyecto predeterminadas

La plantilla que se usa para crear nuevos proyectos de ASP.NET MVC 4 se ha actualizado para crear un sitio con una apariencia más moderna:

Screenshot of the browser view of the new project template page.

Además de las mejoras estéticas, hay una funcionalidad mejorada de la nueva plantilla. La plantilla emplea una técnica denominada representación adaptable para tener una buena apariencia exploradores de dispositivos de escritorio y móviles sin ninguna personalización.

Screenshot of the mobile browser view of the desktop version of the new project template page.

Para ver la representación adaptable en acción, puede usar un emulador móvil o simplemente intentar cambiar el tamaño de la ventana del explorador de escritorio para que sea más pequeña. Cuando la ventana del explorador sea lo suficientemente pequeña, cambiará el diseño de la página.

La plantilla de proyecto para dispositivos móviles

Si va a iniciar un nuevo proyecto y quiere crear un sitio específicamente para exploradores en móviles y tabletas, puede usar la nueva plantilla de proyecto para aplicaciones móviles. Se basa en jQuery Mobile, una biblioteca de código abierto para crear una interfaz de usuario optimizada para entrada táctil:

Screenshot of the mobile browser view of the mobile application project template.

Esta plantilla contiene la misma estructura de aplicación que la plantilla de aplicación de Internet (y el código del controlador es prácticamente idéntico), pero adquiere su estilo mediante jQuery Mobile para que obtenga una buena apariencia y funcione adecuadamente en dispositivos móviles basados en la entrada táctil. Para obtener más información sobre cómo se estructura y se aplica un estilo a la interfaz de usuario móvil, consulte el sitio web del proyecto jQuery Mobile.

Si ya tiene un sitio diseñado para escritorio al que quiere agregar vistas optimizadas para dispositivos móviles, o si busca crear un único sitio que sirva vistas de estilo diferente en exploradores móviles y de escritorio, puede usar la nueva característica Modos de visualización. (Consulte la sección siguiente).

Modos de presentación

La nueva característica Modos de visualización permite a una aplicación seleccionar vistas en función del explorador que hace la solicitud. Por ejemplo, si un explorador de escritorio solicita la Página principal, la aplicación puede usar la plantilla Views\Home\Index.cshtml. Si un explorador en un dispositivo móvil solicita la Página principal, la aplicación puede devolver la plantilla Views\Home\Index.mobile.cshtml.

Los diseños y las vistas parciales también se pueden invalidar para determinados tipos de explorador. Por ejemplo:

  • Si la carpeta Views\Shared contiene las plantillas _Layout.cshtml y _Layout.mobile.cshtml, de forma predeterminada la aplicación usará _Layout.mobile.cshtml durante las solicitudes de exploradores en dispositivos móviles y _Layout.cshtml durante otras solicitudes.
  • Si una carpeta contiene _MyPartial.cshtml y _MyPartial.mobile.cshtml, la instrucción @Html.Partial("_MyPartial") representará _MyPartial.mobile.cshtml en las solicitudes de exploradores en dispositivos móviles y _MyPartial.cshtml durante otras solicitudes.

Si quiere crear vistas, diseños o vistas parciales más específicas para otros dispositivos, puede registrar una nueva instancia DefaultDisplayMode para especificar qué nombre se busca cuando una solicitud cumple condiciones concretas. Por ejemplo, podría agregar el código siguiente al método Application_Start en el archivo Global.asax para registrar la cadena "iPhone" como modo de presentación que se aplica cuando el explorador del iPhone de Apple hace una solicitud:

DisplayModeProvider.Instance.Modes.Insert(0, new
DefaultDisplayMode("iPhone")
{
    ContextCondition = (context => context.GetOverriddenUserAgent().IndexOf
        ("iPhone", StringComparison.OrdinalIgnoreCase) >= 0)
});

Después de ejecutar este código, cuando un explorador de iPhone de Apple hace una solicitud, la aplicación usará el diseño Views\Shared\_Layout.i Teléfono.cshtml (si existe). Para obtener más información sobre el modo de presentación, consulte Características para móviles de ASP.NET MVC 4. Las aplicaciones que usan DisplayModeProvider deben instalar el paqueteNuGet DisplayModes corregido. La actualización de otoño de 2012 de ASP.NET incluye el paquete corregido de NuGet DisplayModes en las nuevas plantillas de proyecto. Consulte ASP.NET MVC 4 Mobile Caching Bug Fixedd, (Error de almacenamiento en caché de dispositivos móviles de MVC 4 ASP.NET corregido), para obtener más información sobre la corrección.

Características para dispositivos móviles y jQuery Mobile

Para obtener información sobre cómo crear aplicaciones móviles con ASP.NET MVC 4 mediante jQuery Mobile, consulte el tutorial Características para móviles de ASP.NET MVC 4.

Compatibilidad de tareas con controladores asincrónicos

Ahora puede escribir métodos de acción asincrónicos como métodos únicos que devuelven un objeto de tipo Tarea o Tarea< ActionResult>.

Para obtener más información, consulte Usar métodos asincrónicos en ASP.NET MVC 4.

SDK de Azure

ASP.NET MVC 4 admite las versiones 1.6 y las más recientes del SDK de Windows Azure.

Migraciones de bases de datos

Los proyectos de ASP.NET MVC 4 ahora incluyen Entity Framework 5. Una de las excelentes características de Entity Framework 5 es la compatibilidad con las migraciones de bases de datos. Con esta característica se puede desarrollar fácilmente el esquema de la base de datos mediante una migración centrada en el código mientras conserva los datos de la base de datos. Para obtener más información sobre las migraciones de bases de datos, consulte Agregar un nuevo campo a la tabla y modelo de películas (C#) en el tutorial Información general de ASP.NET MVC 4.

Plantillas de proyecto vacías

La plantilla de proyecto vacía de MVC ahora lo está realmente para que pueda empezar desde una pizarra completamente despejada. Se ha cambiado el nombre de la versión anterior de la plantilla de proyecto vacía a Básica.

Adición de controladores a cualquier carpeta del proyecto

Ahora puede hacer clic con el botón derecho y seleccionar Agregar controlador en cualquier carpeta del proyecto de MVC. Con esto gana más flexibilidad para organizar los controladores independientemente de lo que quiera, incluido mantener los controladores de MVC y API web en carpetas independientes.

Unión y minificación

El marco de agrupación y minificación le permite reducir el número de solicitudes HTTP que una página web necesita hacer mediante la combinación de archivos individuales en un único archivo agrupado para scripts y CSS. Después puede reducir el tamaño general de esas solicitudes mediante la minificación del contenido de la agrupación. La minificación puede incluir actividades como eliminar espacios en blanco para acortar los nombres de variables a incluso contraer selectores CSS en función de su semántica. Los conjuntos se declaran y configuran en código y se hacen referencia fácilmente a ellas en vistas a través de métodos auxiliares que pueden generar un único vínculo a la agrupación o, al depurar, varios vínculos al contenido individual del lote. Para obtener más información, consulte Unión y Minificación.

Habilitación de inicios de sesión desde Facebook y otros sitios mediante OAuth y OpenID

Las plantillas predeterminadas de las plantillas de proyecto ce Internet de ASP.NET MVC 4 ahora incluyen compatibilidad con el inicio de sesión de OAuth y OpenID mediante la biblioteca DotNetOpenAuth. Para obtener información sobre cómo configurar un proveedor de OAuth u OpenID, consulte OAuth/OpenID Support for WebForms, MVC and WebPages (Compatibilidad de OAuth/OpenID con WebForms, MVC y WebPages) y la documentación de características OAuth y OpenID en ASP.NET Web Pages.

Actualización de un proyecto de ASP.NET MVC 3 a ASP.NET MVC 4

ASP.NET MVC 4 se puede instalar en paralelo con ASP.NET MVC 3 en el mismo equipo, lo que le ofrece la flexibilidad para elegir cuándo actualizar una aplicación ASP.NET MVC 3 a ASP.NET MVC 4.

La manera más sencilla de actualizar es crear un nuevo proyecto de ASP.NET MVC 4 y copiar todas las vistas, controladores, código y archivos de contenido del proyecto MVC 3 existente en el nuevo proyecto y después actualizar las referencias de ensamblado en el nuevo proyecto para que coincidan con cualquier plantilla que no sea de MVC, incluida la que esté usando. Si ha hecho cambios en el archivo Web.config del proyecto MVC 3, también debe combinar esas alteraciones en el archivo Web.config del proyecto MVC 4.

Para actualizar manualmente una aplicación existente de ASP.NET MVC 3 a la versión 4, haga lo siguiente:

  1. En todos los archivos Web.config del proyecto (hay uno en la raíz del proyecto, uno en la carpeta Views y otro en la carpeta Views de cada área del proyecto), reemplace todas las instancias del texto siguiente (tenga en cuenta que System.Web.WebPages, Version=1.0.0.0.0 no se encuentra en los proyectos creados con Visual Studio 2012):

    System.Web.Mvc, Version=3.0.0.0
    System.Web.WebPages, Version=1.0.0.0
    System.Web.Helpers, Version=1.0.0.0
    System.Web.WebPages.Razor, Version=1.0.0.0
    

    con el texto correspondiente siguiente:

    System.Web.Mvc, Version=4.0.0.0
    System.Web.WebPages, Version=2.0.0.0
    System.Web.Helpers, Version=2.0.0.0
    System.Web.WebPages.Razor, Version=2.0.0.0
    
  2. En el archivo raíz Web.config, actualice el elemento webPages:Version a "2.0.0.0" y agregue una nueva clave PreserveLoginUrl que tenga el valor "true":

    <appSettings>
      <add key="webpages:Version" value="2.0.0.0" />
      <add key="PreserveLoginUrl" value="true" />
    </appSettings>
    
  3. En el Explorador de soluciones, haga clic con el botón derecho en Referencias y seleccione Administrar paquetes NuGet. En el panel izquierdo, seleccione Origen del paquete oficial Online\NuGet y después actualice lo siguiente:

    • ASP.NET MVC 4
    • (Opcional) jQuery, jQuery Validation y jQuery UI
    • (Opcional) Entity Framework
    • (Opcional) Modernizr
  4. En el Explorador de soluciones, haga clic con el botón derecho en el nombre del proyecto y luego seleccione Descargar proyecto. Después, vuelva a hacer clic con el botón derecho en el nombre y seleccione Editar ProjectName.csproj.

  5. Busque el elemento ProjectTypeGuids y reemplace {E53F8FEA-EAE0-44A6-8774-FFD645390401} por {E3E379DF-F4C6-4180-9B81-6769533ABE47}.

  6. Guarde los cambios, cierre el archivo del proyecto (.csproj) que estaba editando, haga clic con el botón derecho en el proyecto y después seleccione Volver a cargar proyecto.

  7. Si el proyecto hace referencia a bibliotecas de terceros que se compilan con versiones anteriores de ASP.NET MVC, abra el archivo web.config raíz y agregue los tres elementos bindingRedirect siguientes en la sección configuración :

    <configuration>
      <!--... elements deleted for clarity ...-->
     
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="System.Web.Helpers" 
                 publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" 
                 publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="4.0.0.0"/>
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="System.Web.WebPages" 
                 publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    </configuration>
    

Cambios desde la versión candidata para lanzamiento de ASP.NET MVC 4

Las notas de la versión candidata para lanzamiento de ASP.NET MVC 4 se pueden encontrar aquí:

Los principales cambios de la versión candidata para lanzamiento de ASP.NET MVC 4 en esta versión se resumen a continuación:

  • Configuración por controlador: Los controladores de ASP.NET Web API se pueden atribuir con un atributo personalizado que implementa IControllerConfiguration para configurar sus propios formateadores, selector de acciones y enlazadores de parámetros. Se ha quitado HttpControllerConfigurationAttribute.
  • Controladores de mensajes por ruta: Ahora puede especificar el controlador de mensajes final en la cadena de solicitudes para una ruta determinada. Esto permite la compatibilidad con marcos de desplazamiento para usar el enrutamiento para enviar a sus propios puntos de conexión (que no son IHttpController).
  • Notificaciones de progreso:ProgressMessageHandler genera una notificación sobre el progreso para las entidades de solicitud que se cargan y las entidades de respuesta que se descargan. Con este controlador, es posible hacer un seguimiento de hasta qué punto se está cargando un cuerpo de solicitud o se está descargando un cuerpo de respuesta.
  • Insertar contenido: La clase PushStreamContent permite escenarios en los que un productor de datos quiere escribir directamente en la solicitud o respuesta (ya sea de forma sincrónica o asincrónica) mediante una secuencia. Cuando PushStreamContent está listo para aceptar los datos, llama a un delegado de acción con el flujo de salida. Después, el desarrollador puede escribir en la secuencia durante el tiempo necesario y cerrarla cuando se haya completado la escritura. PushStreamContent detecta el cierre de la secuencia y completa la tarea asincrónica subyacente para escribir el contenido.
  • Creación de respuestas de error: Use el tipo HttpError para representar de forma coherente la información de error, como errores de validación y excepciones, a la vez que respeta IncludeErrorDetailPolicy. Use los nuevos métodos de extensión CreateErrorResponse para crear fácilmente respuestas de error con HttpError como contenido. El contenido HttpError está totalmente negociado.
  • MediaRangeMapping quitado: Los intervalos de tipos de medios ahora se controlan mediante el negociador de contenido predeterminado.
  • El enlace de parámetros predeterminado para parámetros de tipo simple es ahora [FromUri]: En versiones anteriores de ASP.NET Web API, el enlace de parámetros predeterminado para los parámetros de tipo simples utilizaba enlace de modelos. El enlace de parámetros predeterminado para parámetros de tipo simple ahora es [FromUri].
  • La selección de acciones respeta los parámetros necesarios: La selección de acciones de ASP.NET Web API ahora solo seleccionará una acción si se proporcionan todos los parámetros necesarios que proceden del URI. Un parámetro se puede especificar como opcional proporcionando un valor predeterminado para el argumento en la firma del método de acción.
  • Personalización de los enlaces de parámetros HTTP: Use ParameterBindingAttribute para personalizar el enlace de parámetros para un parámetro de acción específico o use ParameterBindingRules en HttpConfiguration para personalizar los enlaces de parámetros de forma más amplia.
  • Mejoras de MediaTypeFormatter: Los formateadores ahora tienen acceso a la instancia completa de HttpContent.
  • Selección de directivas de almacenamiento en búfer de host: Implemente y configure el servicio de IHostBufferPolicySelector en ASP.NET Web API para permitir que los hosts determinen la directiva que determina cuando se usa el almacenamiento en búfer.
  • Obtención de acceso a los certificados de cliente de forma independiente del host: Use el método de extensión GetClientCertificate para obtener el certificado de cliente proporcionado del mensaje de solicitud.
  • Extensibilidad de la negociación de contenido: Personalice la negociación de contenido derivando de DefaultContentNegotiator y reemplazando cualquier aspecto de la negociación de contenido que quiera.
  • Compatibilidad con la devolución de respuestas 406 Not Acceptable: Ahora puede devolver respuestas 406 No Acceptable en ASP.NET Web API cuando no se encuentre un formateador adecuado creando un DefaultContentNegotiator con el parámetro excludeMatchOnTypeOnly establecido en true.
  • Lectura de datos de formulario como NameValueCollection o JToken: Puede leer datos de formulario en la cadena de consulta URI o en el cuerpo de la solicitud como NameValueCollection mediante los métodos de extensión ParseQueryString y ReadAsFormDataAsync respectivamente. Del mismo modo, puede leer datos de formulario en la cadena de consulta de URI o en el cuerpo de la solicitud como JToken mediante los métodos de extensión TryReadQueryAsJson y ReadAsAsync<T> respectivamente.
  • Mejoras de varias partes: Ahora es posible escribir un MultipartStreamProvider que esté completamente adaptado al tipo de datos de varias partes MIME que puede leer y presentar el resultado de la manera óptima para el usuario. También puede enlazar un paso posterior al procesamiento en MultipartStreamProvider que permite a la implementación hacer cualquier procesamiento posterior en las partes del cuerpo de varias partes MIME. Por ejemplo, la implementación MultipartFormDataStreamProvider lee los elementos de datos del formulario HTML y los agrega a una NameValueCollection para que sean fáciles de obtener desde el autor de la llamada.
  • Mejoras de generación de vínculos:UrlHelper ya no depende de HttpControllerContext. Ahora puede acceder a UrlHelper desde cualquier contexto en el que HttpRequestMessage esté disponible.
  • Cambio del orden de ejecución del controlador de mensajes: Los controladores de mensajes ahora se ejecutan en el orden en el que están configurados en lugar de en orden inverso.
  • Asistente para conectar controladores de mensajes: El nuevo HttpClientFactory que puede conectar DelegatingHandlers y crear un HttpClient con la canalización buscada lista para usarse. También proporciona funcionalidad para conectar con controladores internos alternativos (el valor predeterminado es HttpClientHandler), así como hacer el cableado al usar HttpMessageInvoker u otro DelegatingHandler en lugar de HttpClient como el invocador superior.
  • Compatibilidad de CDN en la optimización web de ASP.NET: La optimización web de ASP.NET ahora proporciona compatibilidad con rutas alternativas de red CDN, lo que le permite especificar para cada agrupación una dirección URL adicional que apunta a ese mismo recurso en una red de entrega de contenido. La compatibilidad con CDN permite acercar geográficamente el script y los conjuntos de estilos a los consumidores finales de las aplicaciones web. Las aplicaciones de producción deben implementar una reserva cuando la red CDN no está disponible. Pruebe la reserva.
  • Las rutas de ASP.NET Web API y la configuración se mueven al método estático WebApiConfig.Register que se puede volver a usar en el código de prueba. Las rutas de ASP.NET Web API se agregaron anteriormente a RouteConfig.RegisterRoutes junto con las rutas estándar de MVC. La configuración y las rutas predeterminadas de ASP.NET Web API se controlan ahora en un método WebApiConfig.Register independiente para facilitar las pruebas.

Problemas conocidos y cambios importantes

  • La versión RC y RTM de ASP.NET MVC 4 devolvió incorrectamente las vistas de escritorio almacenadas en caché cuando se deberían devolver vistas móviles.

  • Cambios importantes en el motor de vistas de Razor. Los siguientes tipos se quitaron de System.Web.Mvc.Razor:

    • ModelSpan
    • MvcVBRazorCodeGenerator
    • MvcCSharpRazorCodeGenerator
    • MvcVBRazorCodeParser

    También se quitaron los métodos siguientes:

    • MvcCSharpRazorCodeParser.ParseInheritsStatement(System.Web.Razor.Parser.CodeBlockInfo)
    • MvcWebPageRazorHost.DecorateCodeGenerator(System.Web.Razor.Generator.RazorCodeGenerator)
    • MvcVBRazorCodeParser.ParseInheritsStatement(System.Web.Razor.Parser.CodeBlockInfo)
  • Cuando WebMatrix.WebData.dll se incluye en el directorio /bin de una aplicación de ASP.NET MVC 4, toma la dirección URL para la autenticación de formularios. Al agregar el ensamblado de WebMatrix.WebData.dll a la aplicación (por ejemplo, al seleccionar "ASP.NET Web Pages con sintaxis Razor" en el cuadro de diálogo Agregar dependencias implementables) se invalidará la redirección de inicio de sesión de autenticación a /account/logon en lugar de /account/login según lo previsto por el controlador de cuenta predeterminado de ASP.NET MVC. Para evitarlo y usar la dirección URL especificada ya en la sección de autenticación de web.config, puede agregar un appSetting denominado PreserveLoginUrl y establecerlo en true:

    <appSettings>
        <add key="PreserveLoginUrl" value="true"/>
    </appSettings>
    
  • El administrador de paquetes NuGet produce error al intentar instalar ASP.NET MVC 4 para instalaciones en paralelo de Visual Studio 2010 y Visual Web Developer 2010. Para ejecutar Visual Studio 2010 y Visual Web Developer 2010 en paralelo con ASP.NET MVC 4, debe instalar ASP.NET MVC 4 una vez instaladas ambas versiones de Visual Studio.

  • Si ya se han desinstalado los requisitos previos, se produce un error al desinstalar ASP.NET MVC 4. Para desinstalar completamente ASP.NET MVC 4, debe desinstalar ASP.NET MVC 4 antes de hacerlo con Visual Studio.

  • La instalación de ASP.NET MVC 4 interrumpe las aplicaciones de ASP.NET MVC 3 RTM. Las aplicaciones de ASP.NET MVC 3 creadas con la versión RTM (no con la versión de actualización de herramientas de ASP.NET MVC 3) requieren los siguientes cambios para poder trabajar en paralelo con ASP.NET MVC 4. La compilación del proyecto sin estas actualizaciones produce errores de compilación.

    Actualizaciones necesarias

    1. En el archivo raíz Web.config, agregue una nueva entrada <appSettings> con la clave webPages:Version y el valor 1.0.0.0.

      <appSettings>
          <add key="webpages:Version" value="1.0.0.0"/>
          <add key="ClientValidationEnabled" value="true"/>
          <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
      </appSettings>
      
    2. En el Explorador de soluciones, haga clic con el botón derecho en el nombre del proyecto y luego seleccione Descargar proyecto. Después, vuelva a hacer clic con el botón derecho en el nombre y seleccione Editar ProjectName.csproj.

    3. Busque las siguientes referencias de ensamblado:

      <Reference Include="System.Web.WebPages"/> 
      <Reference Include="System.Web.Helpers" />
      

      Reemplácelas por lo siguiente:

      <Reference Include="System.Web.WebPages, Version=1.0.0.0,
      Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL "/> 
      <Reference Include="System.Web.Helpers, Version=1.0.0.0,
      Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
      
    4. Guarde los cambios, cierre el archivo del proyecto (.csproj) que estaba editando, haga clic con el botón derecho en el proyecto y después seleccione Volver a cargar.

  • Con el cambio del destino en un proyecto de ASP.NET MVC 4 de 4.5 a 4.0. no se actualiza la referencia del ensamblado EntityFramework: Si cambia un proyecto de ASP.NET MVC 4 a 4.0 de destino después de establecer como destino 4.5, la referencia al ensamblado EntityFramework seguirá apuntando a la versión 4.5. Para corregir este problema, desinstale y vuelva a instalar el paquete EntityFramework NuGet.

  • 403 Forbidden al ejecutar una aplicación de ASP.NET MVC 4 en Azure después de cambiar al destino 4.0 desde 4.5: Si cambia un proyecto de ASP.NET MVC 4 a 4.0 como destino después de tener 4.5 y luego hace una implementación en Azure, puede ver un error 403 Forbidden en runtime. Para solucionar este problema, agregue lo siguiente a su web.config: <modules runAllManagedModulesForAllRequests="true" />

  • Visual Studio 2012 se bloquea al escribir " en un literal de cadena en un archivo de Razor. Para solucionar el problema, escriba primero la comilla de cierre del literal de cadena.

  • La exploración a "Account/Manage" en la plantilla de Internet produce un error en runtime con los idiomas CHS, TRK y CHT. Para corregir el problema, modifique la página para separar @User.Identity.Name poniéndolo como el único contenido dentro de la etiqueta <segura>.

  • Los proveedores de Google y LinkedIn no se admiten en sitios web de Azure. Use proveedores de autenticación alternativos al implementar en sitios web de Azure.

  • Al usar UriPathExtensionMapping con IIS 8 Express/IIS, recibirá el error 404 Not Found al intentar usar la extensión. El controlador de archivos estático interferirá con las solicitudes a las API web que usan UriPathExtensionMappings. Establezca runAllManagedModulesForAllRequests=true en web.config para solucionar el problema.

  • Ya no se llama al método Controller.Execute. Todos los controladores MVC ahora siempre se ejecutan de forma asincrónica.