Notas de la versión de ASP.NET and Web Tools para Visual Studio 2013ASP.NET and Web Tools for Visual Studio 2013 Release Notes

por Microsoftby Microsoft

En este documento se describe la versión de ASP.NET and Web Tools para Visual Studio 2013.This document describes the release of ASP.NET and Web Tools for Visual Studio 2013.

ContenidoContents

Nuevas características de ASP.NET and Web Tools para Visual Studio 2013New Features in ASP.NET and Web Tools for Visual Studio 2013

Notas de la instalaciónInstallation Notes

ASP.NET and Web Tools para Visual Studio 2013 se incluyen en el instalador principal y se pueden descargar aquí.ASP.NET and Web Tools for Visual Studio 2013 are bundled in the main installer and can be downloaded here.

DocumentationDocumentation

Los tutoriales y otra información acerca de ASP.NET and Web Tools para Visual Studio 2013 están disponibles en el sitio web de ASP.net.Tutorials and other information about ASP.NET and Web Tools for Visual Studio 2013 are available from the ASP.NET web site.

Requisitos de softwareSoftware Requirements

ASP.NET and Web Tools requiere Visual Studio 2013.ASP.NET and Web Tools requires Visual Studio 2013.

Nuevas características de ASP.NET and Web Tools para Visual Studio 2013New Features in ASP.NET and Web Tools for Visual Studio 2013

En las secciones siguientes se describen las características que se han introducido en la versión.The following sections describe the features that have been introduced in the release.

Una ASP.NETOne ASP.NET

Con el lanzamiento de Visual Studio 2013, hemos realizado un paso para unificar la experiencia de uso de las tecnologías de ASP.NET, de modo que pueda mezclar y encontrar fácilmente las que quiera.With the release of Visual Studio 2013, we have taken a step towards unifying the experience of using ASP.NET technologies, so that you can easily mix and match the ones you want. Por ejemplo, puede iniciar un proyecto con MVC y agregar fácilmente páginas de formularios Web Forms al proyecto más adelante o las API Web de scaffolding en un proyecto de formularios Web Forms.For example, you can start a project using MVC and easily add Web Forms pages to the project later, or scaffold Web APIs in a Web Forms project. Una ASP.NET es hacer que sea más fácil como desarrollador hacer lo que le encanta en ASP.NET.One ASP.NET is all about making it easier for you as a developer to do the things you love in ASP.NET. Independientemente de la tecnología que elija, puede tener la confianza de que está creando en el marco subyacente de confianza de un ASP.NET.No matter what technology you choose, you can have confidence that you are building on the trusted underlying framework of One ASP.NET.

Nueva experiencia de proyecto webNew Web Project Experience

Hemos mejorado la experiencia de creación de nuevos proyectos web en Visual Studio 2013.We have enhanced the experience of creating new web projects in Visual Studio 2013. En el cuadro de diálogo nuevo proyecto Web ASP.net puede seleccionar el tipo de proyecto que desee, configurar cualquier combinación de tecnologías (formularios Web Forms, MVC, API Web), configurar opciones de autenticación y agregar un proyecto de prueba unitaria.In the New ASP.NET Web Project dialog you can select the project type you want, configure any combination of technologies (Web Forms, MVC, Web API), configure authentication options, and add a unit test project.

Nuevo proyecto de ASP.NET

El nuevo cuadro de diálogo permite cambiar las opciones de autenticación predeterminadas para muchas de las plantillas.The new dialog enables you to change the default authentication options for many of the templates. Por ejemplo, al crear un proyecto de formularios Web Forms de ASP.NET, puede seleccionar cualquiera de las siguientes opciones:For example, when you create an ASP.NET Web Forms project you can select any of the following options:

  • Sin autenticaciónNo Authentication
  • Cuentas de usuario individuales (inicio de sesión de ASP.NET o de proveedor de redes sociales)Individual User Accounts (ASP.NET membership or social provider log in)
  • Cuentas organizativas (Active Directory en una aplicación de Internet)Organizational Accounts (Active Directory in an internet application)
  • Autenticación de Windows (Active Directory en una aplicación de intranet)Windows Authentication (Active Directory in an intranet application)

Opciones de autenticación

Para obtener más información sobre el nuevo proceso de creación de proyectos Web, vea crear proyectos Web de ASP.net en Visual Studio 2013.For more information about the new process for creating web projects, see Creating ASP.NET Web Projects in Visual Studio 2013. Para obtener más información acerca de las nuevas opciones de autenticación, vea ASP.net Identity más adelante en este documento.For more information about the new authentication options, see ASP.NET Identity later in this document.

Scaffolding de ASP.NETASP.NET Scaffolding

ASP.NET scaffolding es un marco de generación de código para aplicaciones Web de ASP.NET.ASP.NET Scaffolding is a code generation framework for ASP.NET Web applications. Facilita la adición de código reutilizable al proyecto que interactúa con un modelo de datos.It makes it easy to add boilerplate code to your project that interacts with a data model.

En versiones anteriores de Visual Studio, el scaffolding estaba limitado a los proyectos de MVC de ASP.NET.In previous versions of Visual Studio, scaffolding was limited to ASP.NET MVC projects. Con Visual Studio 2013, ahora puede usar la técnica scaffolding para cualquier proyecto de ASP.NET, incluidos los formularios Web Forms.With Visual Studio 2013, you can now use scaffolding for any ASP.NET project, including Web Forms. En la actualidad, Visual Studio 2013 no admite la generación de páginas para un proyecto de formularios Web Forms, pero puede seguir usando la técnica scaffolding con formularios Web Forms agregando dependencias de MVC al proyecto.Visual Studio 2013 does not currently support generating pages for a Web Forms project, but you can still use scaffolding with Web Forms by adding MVC dependencies to the project. La compatibilidad con la generación de páginas para formularios Web Forms se agregará en una actualización futura.Support for generating pages for Web Forms will be added in a future update.

Al usar la técnica scaffolding, garantizamos que todas las dependencias necesarias están instaladas en el proyecto.When using scaffolding, we ensure that all required dependencies are installed in the project. Por ejemplo, si comienza con un proyecto de formularios Web Forms de ASP.NET y, a continuación, usa scaffolding para agregar un controlador de API Web, los paquetes y las referencias de NuGet necesarios se agregan automáticamente al proyecto.For example, if you start with an ASP.NET Web Forms project and then use scaffolding to add a Web API Controller, the required NuGet packages and references are added to your project automatically.

Para agregar scaffolding de MVC a un proyecto de formularios Web Forms, agregue un nuevo elemento con scaffolding y seleccione dependencias de MVC 5 en la ventana del cuadro de diálogo.To add MVC scaffolding to a Web Forms project, add a New Scaffolded Item and select MVC 5 Dependencies in the dialog window. Hay dos opciones para la scaffolding de MVC; Mínima y completa.There are two options for scaffolding MVC; Minimal and Full. Si selecciona mínima, solo se agregan al proyecto los paquetes NuGet y las referencias para ASP.NET MVC.If you select Minimal, only the NuGet packages and references for ASP.NET MVC are added to your project. Si selecciona la opción completa, se agregan las dependencias mínimas, así como los archivos de contenido necesarios para un proyecto de MVC.If you select the Full option, the Minimal dependencies are added, as well as the required content files for an MVC project.

La compatibilidad con los controladores asincrónicos de scaffolding usa las nuevas características de Async de Entity Framework 6.Support for scaffolding async controllers uses the new async features from Entity Framework 6.

Para obtener más información y tutoriales, vea información general sobre scaffolding de ASP.net.For more information and tutorials, see ASP.NET Scaffolding Overview.

La nueva característica de vínculo del explorador permite conectar varios exploradores a Visual Studio y actualizarlos haciendo clic en un botón de la barra de herramientas.The new Browser Link feature lets you connect multiple browsers to Visual Studio and refresh them all by clicking a button in the toolbar. Puede conectar varios exploradores al sitio de desarrollo, incluidos los emuladores móviles, y hacer clic en actualizar para actualizar todos los exploradores al mismo tiempo.You can connect multiple browsers to your development site, including mobile emulators, and click refresh to refresh all the browsers all at the same time. El vínculo del explorador también expone una API que permite a los desarrolladores escribir extensiones de vínculo del explorador.Browser Link also exposes an API to enable developers to write Browser Link extensions.

Al permitir que los desarrolladores aprovechen la API de vínculo del explorador, se pueden crear escenarios muy avanzados que crucen los límites entre Visual Studio y cualquier explorador que esté conectado.By enabling developers to take advantage of the Browser Link API, it becomes possible to create very advanced scenarios that crosses boundaries between Visual Studio and any browser that's connected. Web Essentials saca partido de la API para crear una experiencia integrada entre Visual Studio y las herramientas de desarrollo del explorador, el control remoto de los emuladores móviles y mucho más.Web Essentials takes advantage of the API to create an integrated experience between Visual Studio and the browser's developer tools, remote controlling mobile emulators and a lot more.

Mejoras del editor web de Visual StudioVisual Studio Web Editor Enhancements

Visual Studio 2013 incluye un nuevo editor HTML para archivos de Razor y HTML en aplicaciones Web.Visual Studio 2013 includes a new HTML editor for Razor files and HTML files in web applications. El nuevo editor HTML proporciona un único esquema unificado basado en HTML5.The new HTML editor provides a single unified schema based on HTML5. Tiene la finalización automática de llaves, la interfaz de usuario de jQuery y el atributo de AngularJS IntelliSense, la agrupación de IntelliSense de atributo, el identificador y el nombre de clase IntelliSense y otras mejoras, como un mejor rendimiento, formato y SmartTags.It has automatic brace completion, jQuery UI and AngularJS attribute IntelliSense, attribute IntelliSense Grouping, ID and class name Intellisense, and other improvements including better performance, formatting and SmartTags.

En la captura de pantalla siguiente se muestra el uso de IntelliSense de atributo bootstrap en el editor HTML.The following screenshot demonstrates using Bootstrap attribute IntelliSense in the HTML editor.

IntelliSense en el editor HTML

Visual Studio 2013 también incluye los editores CoffeeScript y LESS integrados.Visual Studio 2013 also comes with both CoffeeScript and LESS editors built in. El editor LESS incluye todas las características interesantes del editor CSS y tiene IntelliSense específico para variables y mixins en todos los documentos menos de la cadena de @import.The LESS editor comes with all the cool features from the CSS editor and has specific Intellisense for variables and mixins across all the LESS documents in the @import chain.

Compatibilidad de Azure App Service Web Apps en Visual StudioAzure App Service Web Apps Support in Visual Studio

En Visual Studio 2013 con el SDK de Azure para .NET 2,2, puede usar Explorador de servidores para interactuar directamente con las aplicaciones web remotas.In Visual Studio 2013 with the Azure SDK for .NET 2.2, you can use Server Explorer to interact directly with your remote web apps. Puede iniciar sesión en su cuenta de Azure, crear nuevas aplicaciones Web, configurar aplicaciones, ver registros en tiempo real y mucho más.You can sign in to your Azure account, create new web apps, configure apps, view real-time logs, and more. Próximamente después del lanzamiento del SDK 2,2, podrá ejecutar en modo de depuración de forma remota en Azure.Coming soon after SDK 2.2 is released, you'll be able to run in debug mode remotely in Azure. La mayoría de las nuevas características de Azure App Service Web Apps también funcionan en Visual Studio 2012 al instalar la versión actual del SDK de Azure para .NET.Most of the new features for Azure App Service Web Apps also work in Visual Studio 2012 when you install the current release of the Azure SDK for .NET.

Para obtener más información, vea los siguientes recursos:For more information, see the following resources:

Mejoras en la publicación en WebWeb Publish Enhancements

Visual Studio 2013 incluye características de publicación web nuevas y mejoradas.Visual Studio 2013 includes new and enhanced Web Publish features. Estos son algunos de ellos:Here are a few of them:

Para obtener más información acerca de la implementación web de ASP.NET, consulte el sitio de ASP.net.For more information about ASP.NET web deployment, see the ASP.NET site.

NuGet 2.7NuGet 2.7

NuGet 2,7 incluye un amplio conjunto de nuevas características que se describen en detalle en las notas de la versión de nuget 2,7.NuGet 2.7 includes a rich set of new features which are described in detail at NuGet 2.7 Release Notes.

Esta versión de NuGet también elimina la necesidad de proporcionar consentimiento explícito para que la característica de restauración de paquetes de NuGet Descargue paquetes.This version of NuGet also removes the need to provide explicit consent for NuGet's package restore feature to download packages. El consentimiento (y la casilla asociado en el cuadro de diálogo Preferencias de NuGet) ahora se concede mediante la instalación de NuGet.Consent (and the associated checkbox in NuGet's preferences dialog) is now granted by installing NuGet. Ahora, la restauración de paquetes simplemente funciona de forma predeterminada.Now package restore simply works by default.

Formularios Web Forms de ASP.NETASP.NET Web Forms

Una ASP.NETOne ASP.NET

Las plantillas de proyecto de formularios Web Forms se integran perfectamente con la nueva experiencia de ASP.NET.The Web Forms project templates integrate seamlessly with the new One ASP.NET experience. Puede Agregar compatibilidad con MVC y API Web a su proyecto de formularios Web Forms, y puede configurar la autenticación mediante el Asistente para crear un proyecto de ASP.NET.You can add MVC and Web API support to your Web Forms project, and you can configure authentication using the One ASP.NET project creation wizard. Para obtener más información, vea crear proyectos Web de ASP.net en Visual Studio 2013.For more information, see Creating ASP.NET Web Projects in Visual Studio 2013.

ASP.NET IdentityASP.NET Identity

Las plantillas de proyecto de formularios Web Forms admiten el nuevo marco de ASP.NET Identity.The Web Forms project templates support the new ASP.NET Identity framework. Además, las plantillas ahora admiten la creación de un proyecto de intranet de formularios Web Forms.In addition, the templates now support creation of a Web Forms intranet project. Para obtener más información, vea métodos de autenticación en crear proyectos Web de ASP.net en Visual Studio 2013.For more information, see Authentication Methods in Creating ASP.NET Web Projects in Visual Studio 2013.

BootstrapBootstrap

Las plantillas de formularios Web Forms usan bootstrap para proporcionar una apariencia elegante y con capacidad de respuesta que se puede personalizar fácilmente.The Web Forms templates use Bootstrap to provide a sleek and responsive look and feel that you can easily customize. Para obtener más información, consulte bootstrap en el Visual Studio 2013 plantillas de proyecto web.For more information, see Bootstrap in the Visual Studio 2013 web project templates.

ASP.NET MVC 5ASP.NET MVC 5

Una ASP.NETOne ASP.NET

Las plantillas de proyecto de web MVC se integran perfectamente con la nueva experiencia de ASP.NET.The Web MVC project templates integrate seamlessly with the new One ASP.NET experience. Puede personalizar el proyecto de MVC y configurar la autenticación mediante el Asistente para crear un proyecto de ASP.NET.You can customize your MVC project and configure authentication using the One ASP.NET project creation wizard. Puede encontrar un tutorial introductorio para ASP.NET MVC 5 en Introducción con ASP.NET MVC 5.An introductory tutorial to ASP.NET MVC 5 can be found at Getting Started with ASP.NET MVC 5.

Para obtener información sobre cómo actualizar proyectos de MVC 4 a MVC 5, vea Cómo actualizar un proyecto de ASP.NET MVC 4 y Web API a ASP.NET MVC 5 y Web API 2.For information on upgrading MVC 4 projects to MVC 5, see How to Upgrade an ASP.NET MVC 4 and Web API Project to ASP.NET MVC 5 and Web API 2.

ASP.NET IdentityASP.NET Identity

Las plantillas de proyecto de MVC se han actualizado para usar ASP.NET Identity para la autenticación y la administración de identidades.The MVC project templates have been updated to use ASP.NET Identity for authentication and identity management. Encontrará un tutorial que incluye la autenticación de Facebook y Google y la nueva API de pertenencia en creación de una aplicación de ASP.NET MVC 5 con el inicio de sesión de Facebook y Google OAuth2 y OpenID, y creación de una aplicación de ASP.NET MVC con autenticación y base de SQL Database e implementación en Azure App Service.A tutorial featuring Facebook and Google authentication and the new membership API can be found at Create an ASP.NET MVC 5 App with Facebook and Google OAuth2 and OpenID Sign-on and Create an ASP.NET MVC app with auth and SQL DB and deploy to Azure App Service.

BootstrapBootstrap

La plantilla de proyecto de MVC se ha actualizado para usar bootstrap para proporcionar una apariencia elegante y con capacidad de respuesta que se puede personalizar fácilmente.The MVC project template has been updated to use Bootstrap to provide a sleek and responsive look and feel that you can easily customize. Para obtener más información, consulte bootstrap en el Visual Studio 2013 plantillas de proyecto web.For more information, see Bootstrap in the Visual Studio 2013 web project templates.

Filtros de autenticaciónAuthentication filters

Los filtros de autenticación son un nuevo tipo de filtro en ASP.NET MVC que se ejecuta antes de los filtros de autorización en la canalización ASP.NET MVC y le permite especificar la lógica de autenticación por acción, por controlador o globalmente para todos los controladores.Authentication filters are a new kind of filter in ASP.NET MVC that run prior to authorization filters in the ASP.NET MVC pipeline and allow you to specify authentication logic per-action, per-controller, or globally for all controllers. Los filtros de autenticación procesan las credenciales en la solicitud y proporcionan una entidad de seguridad correspondiente.Authentication filters process credentials in the request and provide a corresponding principal. Los filtros de autenticación también pueden agregar desafíos de autenticación en respuesta a solicitudes no autorizadas.Authentication filters can also add authentication challenges in response to unauthorized requests.

Filtrar invalidacionesFilter overrides

Ahora puede invalidar los filtros que se aplican a un determinado método de acción o controlador especificando un filtro de invalidación.You can now override which filters apply to a given action method or controller by specifying an override filter. Los filtros de invalidación especifican un conjunto de tipos de filtro que no se deben ejecutar para un ámbito determinado (acción o controlador).Override filters specify a set of filter types that should not be run for a given scope (action or controller). Esto le permite configurar filtros que se aplican globalmente pero, a continuación, excluir determinados filtros globales de la aplicación de acciones o controladores específicos.This allows you to configure filters that apply globally but then exclude certain global filters from applying to specific actions or controllers.

Enrutamiento mediante atributosAttribute routing

ASP.NET MVC admite ahora el enrutamiento de atributos, gracias a la contribución de Tim McCall, el autor de http://attributerouting.net.ASP.NET MVC now supports attribute routing, thanks to a contribution by Tim McCall, the author of http://attributerouting.net. Con el enrutamiento de atributo puede especificar las rutas anotando las acciones y los controladores.With attribute routing you can specify your routes by annotating your actions and controllers.

ASP.NET Web API 2ASP.NET Web API 2

Enrutamiento mediante atributosAttribute routing

ASP.NET Web API admite ahora el enrutamiento de atributos, gracias a la contribución de Tim McCall, el autor de http://attributerouting.net.ASP.NET Web API now supports attribute routing, thanks to a contribution by Tim McCall, the author of http://attributerouting.net. Con el enrutamiento de atributos, puede especificar las rutas de la API Web mediante la anotación de las acciones y los controladores como se indica a continuación:With attribute routing you can specify your Web API routes by annotating your actions and controllers like this:

[RoutePrefix("orders")] 
public class OrdersController : ApiController 
{ 
    [Route("{id}")] 
    public Order Get(int id) { } 
    [Route("{id}/approve")] 
    public Order Approve(int id) { } 
}

El enrutamiento de atributos le proporciona más control sobre los URI de la API Web.Attribute routing gives you more control over the URIs in your web API. Por ejemplo, puede definir fácilmente una jerarquía de recursos con un solo controlador de API:For example, you can easily define a resource hierarchy using a single API controller:

public class MoviesController : ApiController 
{ 
    [Route("movies")] 
    public IEnumerable<Movie> Get() { } 
    [Route("actors/{actorId}/movies")] 
    public IEnumerable<Movie> GetByActor(int actorId) { } 
    [Route("directors/{directorId}/movies")] 
    public IEnumerable<Movie> GetByDirector(int directorId) { } 
}

El enrutamiento de atributos también proporciona una sintaxis adecuada para especificar parámetros opcionales, valores predeterminados y restricciones de ruta:Attribute routing also provides a convenient syntax for specifying optional parameters, default values, and route constraints:

// Optional parameter
[Route("people/{name?}")]
// Default value
[Route("people/{name=Dan}")]
// Constraint: Alphabetic characters only. 
[Route("people/{name:alpha}")]

Para obtener más información sobre el enrutamiento de atributos, consulte enrutamiento de atributos en Web API 2.For more information about attribute routing, see Attribute Routing in Web API 2.

OAuth 2,0OAuth 2.0

Las plantillas de proyecto de aplicación de página única y API Web ahora admiten la autorización mediante OAuth 2,0.The Web API and Single Page Application project templates now support authorization using OAuth 2.0. OAuth 2,0 es un marco para autorizar el acceso de cliente a los recursos protegidos.OAuth 2.0 is a framework for authorizing client access to protected resources. Funciona para una gran variedad de clientes, incluidos exploradores y dispositivos móviles.It works for a variety of clients including browsers and mobile devices.

La compatibilidad con OAuth 2,0 se basa en el nuevo middleware de seguridad que proporcionan los componentes OWIN de Microsoft para la autenticación del portador y la implementación del rol de servidor de autorización.Support for OAuth 2.0 is based on new security middleware provided by the Microsoft OWIN Components for bearer authentication and implementing the authorization server role. Como alternativa, los clientes pueden ser autorizados mediante un servidor de autorización de la organización, como Azure Active Directory o ADFS en Windows Server 2012 R2.Alternatively, clients can be authorized using an organizational authorization server, such as Azure Active Directory or ADFS in Windows Server 2012 R2.

Mejoras de ODataOData Improvements

Compatibilidad con $select, $expand, $batch y $valueSupport for $select, $expand, $batch, and $value

ASP.NET Web API OData ahora tiene compatibilidad total con $select, $expand y $value.ASP.NET Web API OData now has full support for $select, $expand, and $value. También puede utilizar $batch para el procesamiento por lotes de solicitudes y el procesamiento de conjuntos de cambios.You can also use $batch for request batching and processing of change sets.

Las opciones $select y $expand permiten cambiar la forma de los datos que se devuelven desde un punto de conexión de OData.The $select and $expand options let you change the shape of the data that is returned from an OData endpoint. Para obtener más información, consulte introducing $Select and $Expand support in Web API OData.For more information, see Introducing $select and $expand support in Web API OData.

Extensibilidad mejoradaImproved extensibility

Los formateadores de OData ahora son extensibles.The OData formatters are now extensible. Puede agregar metadatos de entrada de Atom, admitir entradas de vínculo multimedia y de flujo con nombre, agregar anotaciones de instancia y personalizar el modo en que se generan los vínculos.You can add Atom entry metadata, support named stream and media link entries, add instance annotations, and customize how links are generated.

Compatibilidad con tipos menosType-less support

Ahora puede crear servicios de OData sin necesidad de definir tipos CLR para los tipos de entidad.You can now build OData services without needing to define CLR types for your entity types. En su lugar, los controladores de OData pueden tomar o devolver instancias de IEdmObject, que son los formateadores de oData Serialize/Deserialize.Instead, your OData controllers can take or return instances of IEdmObject, which are the OData formatters serialize/deserialize.

Reutilizar un modelo existenteReuse an existing model

Si ya tiene un Entity Data Model (EDM) existente, ahora puede reutilizarlo directamente, en lugar de tener que crear uno nuevo.If you already have an existing entity data model (EDM), you can now reuse it directly, instead of having to build a new one. Por ejemplo, si usa Entity Framework, puede usar el EDM que EF crea automáticamente.For example, if you are using Entity Framework, you can use the EDM that EF builds for you.

Procesamiento por lotes de solicitudesRequest Batching

El procesamiento por lotes de solicitudes combina varias operaciones en una única solicitud HTTP POST, para reducir el tráfico de red y proporcionar una interfaz de usuario más sencilla y menos conversante.Request batching combines multiple operations into a single HTTP POST request, to reduce network traffic and provide a smoother, less chatty user interface. ASP.NET Web API admite ahora varias estrategias para el procesamiento por lotes de solicitudes:ASP.NET Web API now supports several strategies for request batching:

  • Use el punto de conexión $batch de un servicio de OData.Use the $batch endpoint of an OData service.
  • Empaquete varias solicitudes en una única solicitud de varias partes MIME.Package multiple requests into a single MIME multipart request.
  • Use un formato de procesamiento por lotes personalizado.Use a custom batching format.

Para habilitar el procesamiento por lotes de solicitudes, solo tiene que agregar una ruta con un controlador de procesamiento por lotes a la configuración de la API Web:To enable request batching, simply add a route with a batching handler to your Web API configuration:

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
        config.Routes.MapHttpBatchRoute( 
            routeName: "WebApiBatch", 
            routeTemplate: "api/batch", 
            batchHandler: new DefaultHttpBatchHandler(GlobalConfiguration.DefaultServer)); 
    } 
}

También puede controlar si las solicitudes se ejecutan secuencialmente o en cualquier orden.You can also control whether requests or executed sequentially or in any order.

Cliente de ASP.NET Web API portátilPortable ASP.NET Web API Client

Ahora puede usar el cliente de ASP.NET Web API para crear bibliotecas de clases portables que funcionan en las aplicaciones de la tienda Windows y de Windows Phone 8.You can now use the ASP.NET Web API Client to create portable class libraries that work across your Windows Store and Windows Phone 8 applications. También puede crear formateadores portátiles que se pueden compartir entre el cliente y el servidor.You can also create portable formatters that can be shared across client and server.

Mejora de la capacidad de pruebaImproved Testability

Web API 2 hace que sea mucho más fácil realizar pruebas unitarias de los controladores de API.Web API 2 makes it much easier to unit test your API controllers. Simplemente cree una instancia del controlador de API con el mensaje de solicitud y la configuración y, después, llame al método de acción que desea probar.Just instantiate your API controller with your request message and configuration, and then call the action method you wish to test. También es fácil simular la clase UrlHelper para los métodos de acción que realizan la generación de vínculos.It is also easy to mock the UrlHelper class, for action methods that perform link generation.

IHttpActionResultIHttpActionResult

Ahora puede implementar IHttpActionResult para encapsular el resultado de los métodos de acción de la API Web.You can now implement IHttpActionResult to encapsulate the result of your Web API action methods. El tiempo de ejecución de ASP.NET Web API ejecuta un IHttpActionResult devuelto desde un método de acción de la API Web para generar el mensaje de respuesta resultante.An IHttpActionResult returned from a Web API action method is executed by the ASP.NET Web API runtime to produce the resultant response message. Se puede devolver un IHttpActionResult desde cualquier acción de la API Web para simplificar las pruebas unitarias de la implementación de la API Web.An IHttpActionResult can be returned from any Web API action to simplify unit testing of your Web API implementation. Para mayor comodidad, se proporcionan una serie de implementaciones de IHttpActionResult, incluidos los resultados para devolver códigos de estado específicos, contenido con formato o respuestas negociadas por contenido.For convenience a number of IHttpActionResult implementations are provided out of the box including results for returning specific status codes, formatted content or content-negotiated responses.

HttpRequestContextHttpRequestContext

El nuevo HttpRequestContext realiza un seguimiento de cualquier Estado que esté asociado a la solicitud, pero que no esté disponible inmediatamente desde la solicitud.The new HttpRequestContext tracks any state that is tied to the request but is not immediately available from the request. Por ejemplo, puede usar HttpRequestContext para obtener los datos de ruta, la entidad de seguridad asociada a la solicitud, el certificado de cliente, el UrlHelper y la raíz de la ruta de acceso virtual.For example, you can use the HttpRequestContext to get route data, the principal associated with the request, the client certificate, the UrlHelper and the virtual path root. Puede crear fácilmente un HttpRequestContext para fines de pruebas unitarias.You can easily create an HttpRequestContext for unit testing purposes.

Dado que la entidad de seguridad de la solicitud se transmite con la solicitud en lugar de depender de Thread. CurrentPrincipal, la entidad de seguridad está ahora disponible a lo largo de la duración de la solicitud mientras se encuentra en la canalización de la API Web.Because the principal for the request is flowed with the request instead of relying on Thread.CurrentPrincipal, the principal is now available throughout the lifetime of the request while it is in the Web API pipeline.

CORSCORS

Gracias a otra gran contribución de Brock Allen, ASP.NET ahora es totalmente compatible con el uso compartido de solicitudes de origen cruzado (CORS).Thanks to another great contribution from Brock Allen, ASP.NET now fully supports Cross Origin Request Sharing (CORS).

La seguridad del explorador evita que una página web realice solicitudes AJAX a otro dominio.Browser security prevents a web page from making AJAX requests to another domain. CORS es un estándar del W3C que permite a un servidor relajar la Directiva del mismo origen.CORS is a W3C standard that allows a server to relax the same-origin policy. Con CORS, un servidor puede permitir explícitamente algunas solicitudes entre orígenes y rechazar otras.Using CORS, a server can explicitly allow some cross-origin requests while rejecting others.

Web API 2 ahora es compatible con CORS, incluido el control automático de las solicitudes preparatorias.Web API 2 now supports CORS, including automatic handling of preflight requests. Para obtener más información, vea habilitar solicitudes entre orígenes en ASP.net web API.For more information, see Enabling Cross-Origin Requests in ASP.NET Web API.

Filtros de autenticaciónAuthentication Filters

Los filtros de autenticación son un nuevo tipo de filtro en ASP.NET Web API que se ejecutan antes que los filtros de autorización en la canalización de ASP.NET Web API y permiten especificar la lógica de autenticación por acción, por controlador o globalmente para todos los controladores.Authentication filters are a new kind of filter in ASP.NET Web API that run prior to authorization filters in the ASP.NET Web API pipeline and allow you to specify authentication logic per-action, per-controller, or globally for all controllers. Los filtros de autenticación procesan las credenciales en la solicitud y proporcionan una entidad de seguridad correspondiente.Authentication filters process credentials in the request and provide a corresponding principal. Los filtros de autenticación también pueden agregar desafíos de autenticación en respuesta a solicitudes no autorizadas.Authentication filters can also add authentication challenges in response to unauthorized requests.

Filtrar invalidacionesFilter Overrides

Ahora puede invalidar los filtros que se aplican a un determinado método de acción o controlador especificando un filtro de invalidación.You can now override which filters apply to a given action method or controller, by specifying an override filter. Los filtros de invalidación especifican un conjunto de tipos de filtro que no deben ejecutarse para un ámbito determinado (acción o controlador).Override filters specify a set of filter types that should not run for a given scope (action or controller). Esto le permite agregar filtros globales, pero excluir algunos de acciones o controladores específicos.This allows you to add global filters, but then exclude some from specific actions or controllers.

Integración OWINOWIN Integration

ASP.NET Web API ahora es totalmente compatible con OWIN y se puede ejecutar en cualquier host compatible con OWIN.ASP.NET Web API now fully supports OWIN and can be run on any OWIN capable host. También se incluye un HostAuthenticationFilter que proporciona integración con el sistema de autenticación OWIN.Also included is a HostAuthenticationFilter that provides integration with the OWIN authentication system.

Con la integración de OWIN, puede autohospedar la API Web en su propio proceso junto con otro middleware OWIN, como Signalr.With OWIN integration, you can self-host Web API in your own process alongside other OWIN middleware, such as SignalR. Para obtener más información, consulte uso de OWIN para Autohospedar ASP.net web API.For more information, see Use OWIN to Self-Host ASP.NET Web API.

ASP.NET Signalr 2,0ASP.NET SignalR 2.0

En las secciones siguientes se describen las características de Signalr 2,0.The following sections describe features of SignalR 2.0.

Para obtener un ejemplo de cómo actualizar un proyecto existente de 1. x a Signalr 2,0, consulte actualización de un proyecto signalr 1. x.For an example of how to upgrade an existing 1.x project to SignalR 2.0, see Upgrading a SignalR 1.x Project.

Basado en OWINBuilt on OWIN

Signalr 2,0 se ha creado completamente en OWIN (la interfaz web abierta para .net).SignalR 2.0 is built completely on OWIN (the Open Web Interface for .NET). Este cambio hace que el proceso de configuración de Signalr sea mucho más coherente entre las aplicaciones de Signalr hospedadas en Web y autohospedadas, pero también requiere una serie de cambios en la API.This change makes the setup process for SignalR much more consistent between web-hosted and self-hosted SignalR applications, but has also required a number of API changes.

MapHubs y MapConnection ahora son MapSignalRMapHubs and MapConnection are now MapSignalR

Por compatibilidad con los estándares OWIN, se ha cambiado el nombre de estos métodos a MapSignalR.For compatibility with OWIN standards, these methods have been renamed to MapSignalR. MapSignalR se llama sin parámetros asignará todos los concentradores (como MapHubs en la versión 1. x); para asignar objetos PersistentConnection individuales, especifique el tipo de conexión como parámetro de tipo y la extensión de dirección URL para la conexión como primer argumento.MapSignalR called without parameters will map all hubs (as MapHubs does in version 1.x); to map individual PersistentConnection objects, specify the connection type as the type parameter, and the URL extension for the connection as the first argument.

Se llama al método MapSignalR en una clase de inicio Owin.The MapSignalR method is called in an Owin startup class. Visual Studio 2013 contiene una plantilla nueva para una clase de inicio Owin; para usar esta plantilla, haga lo siguiente:Visual Studio 2013 contains a new template for an Owin startup class; to use this template, do the following:

  1. Haga clic con el botón derecho en el proyecto.Right-click on the project
  2. Seleccione Agregar, nuevo elemento. ..Select Add, New Item...
  3. Seleccione clase de inicio Owin.Select Owin Startup class. Asigne a la nueva clase el nombre Startup.CS.Name the new class Startup.cs.

En una aplicación Web, la clase de inicio Owin que contiene el método MapSignalR se agrega al proceso de inicio de Owin mediante una entrada en el nodo configuración de la aplicación del archivo Web. config, como se muestra a continuación.In a Web application, the Owin startup class containing the MapSignalR method is then added to Owin's startup process using an entry in the application settings node of the Web.Config file, as shown below.

En una aplicación autohospedada, la clase startup se pasa como el parámetro de tipo del método WebApp.Start.In a Self-hosted application, the Startup class is passed as the type parameter of the WebApp.Start method.

Asignación de concentradores y conexiones en Signalr 1. x (desde el archivo de aplicación global en una aplicación web):Mapping hubs and connections in SignalR 1.x (from the global application file in a web application):

protected void Application_Start(object sender, EventArgs e) 
{
    // Map all hubs to "/signalr"
    RouteTable.Routes.MapHubs();
    // Map the Echo PersistentConnection to "/echo"
    RouteTable.Routes.MapConnection<myconnection>("echo", "/echo");
}

Asignación de concentradores y conexiones en Signalr 2,0 (desde un archivo de clase de inicio Owin):Mapping hubs and connections in SignalR 2.0 (from an Owin Startup class file):

using Microsoft.AspNet.SignalR;
using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(MyWebApplication.Startup))]

namespace MyWebApplication
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Map all hubs to "/signalr"
            app.MapSignalR();
            // Map the Echo PersistentConnection to "/echo"
            app.MapSignalR<echoconnection>("/echo");
        }
    }
}

En una aplicación autohospedada, la clase startup se pasa como parámetro de tipo para el método WebApp.Start, como se muestra a continuación.In a Self-hosted application, the Startup class is passed as the type parameter for the WebApp.Start method, as shown below.

string url = "http://localhost:8080";
using (WebApp.Start<startup>(url))
{
    Console.WriteLine("Server running on {0}", url);
    Console.ReadLine();
}

Compatibilidad entre dominiosCross-Domain Support

En Signalr 1. x, las solicitudes entre dominios se controlaban mediante una sola marca EnableCrossDomain.In SignalR 1.x, cross domain requests were controlled by a single EnableCrossDomain flag. Esta marca controla las solicitudes JSONP y CORS.This flag controlled both JSONP and CORS requests. Para mayor flexibilidad, se ha quitado toda la compatibilidad con CORS del componente de servidor de Signalr (los clientes de JavaScript todavía usan CORS normalmente si se detecta que el explorador lo admite) y se ha puesto a disposición un nuevo middleware OWIN para admitir estos escenarios.For greater flexibility, all CORS support has been removed from the server component of SignalR (JavaScript clients still use CORS normally if it is detected that the browser supports it), and new OWIN middleware has been made available to support these scenarios.

En Signalr 2,0, si se requiere JSONP en el cliente (para admitir solicitudes entre dominios en exploradores anteriores), deberá habilitarse explícitamente estableciendo EnableJSONP en el objeto HubConfiguration en true, como se muestra a continuación.In SignalR 2.0, If JSONP is required on the client (to support cross-domain requests in older browsers), it will need to be enabled explicitly by setting EnableJSONP on the HubConfiguration object to true, as shown below. JSONP está deshabilitado de forma predeterminada, ya que es menos seguro que CORS.JSONP is disabled by default, as it is less secure than CORS.

Para agregar el nuevo middleware de CORS en Signalr 2,0, agregue la biblioteca Microsoft.Owin.Cors al proyecto y llame a UseCors antes del middleware Signalr, tal como se muestra en la sección siguiente.To add the new CORS middleware in SignalR 2.0, add the Microsoft.Owin.Cors library to your project, and call UseCors before your SignalR middleware, as shown in the section below.

Agregando Microsoft. Owin. CORS al proyecto: para instalar esta biblioteca, ejecute el siguiente comando en la consola del administrador de paquetes:Adding Microsoft.Owin.Cors to your project: To install this library, run the following command in the Package Manager Console:

Install-Package Microsoft.Owin.Cors

Este comando agregará la versión 2.0.0 del paquete al proyecto.This command will add the 2.0.0 version of the package to your project.

Llamando a UseCorsCalling UseCors

En los fragmentos de código siguientes se muestra cómo implementar conexiones entre dominios en Signalr 1. x y 2,0.The following code snippets demonstrate how to implement cross-domain connections in SignalR 1.x and 2.0.

Implementación de solicitudes entre dominios en Signalr 1. x (desde el archivo de aplicación global)Implementing cross-domain requests in SignalR 1.x (from the global application file)

protected void Application_Start(object sender, EventArgs e) 
{
    var hubConfiguration = new HubConfiguration();
    hubConfiguration.EnableCrossDomain = true;
    RouteTable.Routes.MapHubs(hubConfiguration);
}

Implementación de solicitudes entre dominios en Signalr 2,0 (desde un C# archivo de código)Implementing cross-domain requests in SignalR 2.0 (from a C# code file)

En el código siguiente se muestra cómo habilitar CORS o JSONP en un proyecto Signalr 2,0.The following code demonstrates how to enable CORS or JSONP in a SignalR 2.0 project. En este ejemplo de código se usa Map y RunSignalR en lugar de MapSignalR, de modo que el middleware de CORS solo se ejecute para las solicitudes de Signalr que requieran compatibilidad con CORS (en lugar de para todo el tráfico de la ruta de acceso especificada en MapSignalR). Map también se puede usar para cualquier otro middleware que deba ejecutarse para un prefijo de dirección URL específico, en lugarThis code sample uses Map and RunSignalR instead of MapSignalR, so that the CORS middleware runs only for the SignalR requests that require CORS support (rather than for all traffic at the path specified in MapSignalR.) Map can also be used for any other middleware that needs to run for a specific URL prefix, rather than for the entire application.

using Microsoft.AspNet.SignalR;
using Microsoft.Owin.Cors;
using Owin;

[assembly: OwinStartup(typeof(MyWebApplication.Startup))]

namespace MyWebApplication
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Branch the pipeline here for requests that start with "/signalr"
            app.Map("/signalr", map =>
            {
                // Setup the CORS middleware to run before SignalR.
                // By default this will allow all origins. You can 
                // configure the set of origins and/or http verbs by
                // providing a cors options with a different policy.
                map.UseCors(CorsOptions.AllowAll);
                var hubConfiguration = new HubConfiguration 
                {
                    // You can enable JSONP by uncommenting line below.
                    // JSONP requests are insecure but some older browsers (and some
                    // versions of IE) require JSONP to work cross domain
                    // EnableJSONP = true
                };
                // Run the SignalR pipeline. We're not using MapSignalR
                // since this branch already runs under the "/signalr"
                // path.
                map.RunSignalR(hubConfiguration);
            });
        }
    }
}

compatibilidad con iOS y Android a través de MonoTouch y MonoDroidiOS and Android support via MonoTouch and MonoDroid

Se ha agregado compatibilidad con los clientes de iOS y Android mediante componentes MonoTouch y MonoDroid de la biblioteca de Xamarin.Support has been added for iOS and Android clients using MonoTouch and MonoDroid components from the Xamarin library. Para obtener más información sobre cómo usarlas, vea uso de componentes de Xamarin.For more information on how to use them, see Using Xamarin Components. Estos componentes estarán disponibles en el almacén de Xamarin cuando la versión de signalr RTW esté disponible.These components will be available in the Xamarin Store when the SignalR RTW release is available.

# # # Cliente .NET portátil### Portable .NET client

Para facilitar mejor el desarrollo multiplataforma, los clientes de Silverlight, WinRT y Windows Phone se han reemplazado por un solo cliente de .NET portátil que admite las siguientes plataformas:To better facilitate cross-platform development, the Silverlight, WinRT and Windows Phone clients have been replaced with a single portable .NET client that supports the following platforms:

  • NET 4,5NET 4.5
  • Silverlight 5Silverlight 5
  • WinRT (.NET para aplicaciones de la tienda Windows)WinRT (.NET for Windows Store Apps)
  • Windows Phone 8Windows Phone 8

Nuevo paquete de autohospedajeNew Self-Host Package

Ahora hay un paquete NuGet para que sea más fácil empezar a trabajar con el autohospedador de Signalr (aplicaciones de Signalr que se hospedan en un proceso u otra aplicación, en lugar de hospedarse en un servidor Web).There is now a NuGet package to make it easier to get started with SignalR Self-Host (SignalR applications that are hosted in a process or other application, rather than being hosted in a web server). Para actualizar un proyecto de host propio compilado con Signalr 1. x, quite el paquete Microsoft. AspNet. Signalr. Owin y agregue el paquete Microsoft. AspNet. Signalr. SelfHost.To upgrade a self-host project built with SignalR 1.x, remove the Microsoft.AspNet.SignalR.Owin package, and add the Microsoft.AspNet.SignalR.SelfHost package. Para obtener más información sobre cómo empezar a usar el paquete de autohospedaje, consulte Tutorial: Autohospedaje de signalr.For more information on getting started with the self-host package, see Tutorial: SignalR Self-Host.

Compatibilidad con el servidor compatible con versiones anterioresBackward-compatible server support

En versiones anteriores de Signalr, las versiones del paquete Signalr que se usaban en el cliente y el servidor debían ser idénticas.In previous versions of SignalR, the versions of the SignalR package used in the client and the server needed to be identical. Con el fin de admitir aplicaciones cliente gruesas que serían difíciles de actualizar, Signalr 2,0 ahora admite el uso de una versión de servidor más reciente con un cliente anterior.In order to support thick-client applications that would be difficult to update, SignalR 2.0 now supports using a newer server version with an older client. Nota: Signalr 2,0 no admite servidores compilados con versiones anteriores con clientes más recientes.Note: SignalR 2.0 does not support servers built with older versions with newer clients.

Se ha quitado la compatibilidad de servidor para .NET 4,0Removed server support for .NET 4.0

Signalr 2,0 ha quitado la compatibilidad con la interoperabilidad del servidor con .NET 4,0.SignalR 2.0 has dropped support for server interoperability with .NET 4.0. .NET 4,5 debe usarse con servidores Signalr 2,0..NET 4.5 must be used with SignalR 2.0 servers. Todavía hay un cliente .NET 4,0 para Signalr 2,0.There is still a .NET 4.0 client for SignalR 2.0.

Envío de un mensaje a una lista de clientes y gruposSending a message to a list of clients and groups

En Signalr 2,0, se puede enviar un mensaje mediante una lista de identificadores de cliente y de grupo.In SignalR 2.0, it's possible to send a message using a list of client and group IDs. En los fragmentos de código siguientes se muestra cómo hacerlo.The following code snippets demonstrate how to do this.

Envío de un mensaje a una lista de clientes y grupos mediante PersistentConnectionSending a message to a list of clients and groups using PersistentConnection

using Microsoft.AspNet.SignalR;
using System.Collections.Generic;
public class ChatConnection : PersistentConnection
{
    static List<string> ConnectionIds = new List<string>();
    static List<string> groups = new List<string>{"chatGroup", "chatGroup2"};
    protected override System.Threading.Tasks.Task OnReceived(IRequest request, string connectionId, string data)
    {
        Connection.Send(ConnectionIds, data);
        Groups.Send(groups, data);
        return base.OnReceived(request, connectionId, data);
    }
    protected override System.Threading.Tasks.Task OnConnected(IRequest request, string connectionId)
    {
        ConnectionIds.Add(connectionId);
        Groups.Add(connectionId, "chatGroup");
        return base.OnConnected(request, connectionId);
    }
    protected override System.Threading.Tasks.Task OnDisconnected(IRequest request, string connectionId)
    {
        ConnectionIds.Remove(connectionId);
        return base.OnDisconnected(request, connectionId);
    }
}

Envío de un mensaje a una lista de clientes y grupos mediante hubsSending a message to a list of clients and groups using Hubs

using Microsoft.AspNet.SignalR;
using System.Collections.Generic;
public class ChatHub : Hub
{
    static List<string> ConnectionIds = new List<string>();
    static List<string> groups = new List<string> { "chatGroup", "chatGroup2" };
    public void Send(string name, string message)
    {
        // Call the broadcastMessage method to update clients.
        Clients.Clients(ConnectionIds).broadcastMessage(name, message);
        Clients.Groups(groups).broadcastMessage(name, message);
    }
    public override System.Threading.Tasks.Task OnConnected()
    {
        ConnectionIds.Add(Context.ConnectionId);
        Groups.Add(Context.ConnectionId, "chatGroup");
        return base.OnConnected();
    }
    public override System.Threading.Tasks.Task OnDisconnected()
    {
        ConnectionIds.Remove(Context.ConnectionId);
        return base.OnDisconnected();
    }
}

Enviar un mensaje a un usuario específicoSending a message to a specific user

Esta característica permite a los usuarios especificar qué identificador de usuario se basa en un objeto irequest a través de una nueva interfaz IUserIdProvider:This feature allows users to specify what the userId is based on an IRequest via a new interface IUserIdProvider:

La interfaz IUserIdProviderThe IUserIdProvider interface

public interface IUserIdProvider
{
    string GetUserId(IRequest request);
}

De forma predeterminada, habrá una implementación que usa el IPrincipal.Identity.Name del usuario como nombre de usuario.By default there will be an implementation that uses the user's IPrincipal.Identity.Name as the user name.

En hubs, podrá enviar mensajes a estos usuarios a través de una nueva API:In hubs, you'll be able to send messages to these users via a new API:

Uso de la API clients. UserUsing the Clients.User API

public class MyHub : Hub
{
    public void Send(string userId, string message)
    {
        Clients.User(userId).send(message);
    }
}

Mejor compatibilidad con el control de erroresBetter Error Handling Support

Los usuarios ahora pueden iniciar HubException desde cualquier invocación del concentrador.Users can now throw HubException from any hub invocation. El constructor de HubException puede tomar un mensaje de cadena y un objeto de datos de error adicional.The constructor of the HubException can take a string message and an object extra error data. Signalr serializará automáticamente la excepción y la enviará al cliente, donde se usará para rechazar o suspender la invocación del método de concentrador.SignalR will auto-serialize the exception and send it to the client where it will be used to reject/fail the hub method invocation.

El valor de Mostrar excepciones de concentrador detallado no tiene ningún hecho en que HubException se envíe de vuelta al cliente. siempre se envía.The show detailed hub exceptions setting has no bearing on HubException being sent back to the client or not; it is always sent.

Código del lado servidor que muestra el envío de un HubException al clienteServer-side code demonstrating sending a HubException to the client

public class MyHub : Hub
{
    public void Send(string message)
    {
        if(message.Contains("<script>"))
        {
            throw new HubException("This message will flow to the client", new { user = Context.User.Identity.Name, message = message });
        }

        Clients.All.send(message);
    }
}

Código de cliente de JavaScript que muestra la respuesta a un HubException enviado desde el servidorJavaScript client code demonstrating responding to a HubException sent from the server

myHub.server.send("<script>")
            .fail(function (e) {
                if (e.source === 'HubException') {
                    console.log(e.message + ' : ' + e.data.user);
                }
            });

Código de cliente .NET que muestra la respuesta a un HubException enviado desde el servidor.NET client code demonstrating responding to a HubException sent from the server

try
{
    await myHub.Invoke("Send", "<script>");
}
catch(HubException ex)
{
    Conosle.WriteLine(ex.Message);
}

Pruebas unitarias más sencillas de los concentradoresEasier unit testing of hubs

Signalr 2,0 incluye una interfaz denominada IHubCallerConnectionContext en los concentradores que facilita la creación de invocaciones del lado cliente ficticios.SignalR 2.0 includes an interface called IHubCallerConnectionContext on Hubs that makes it easier to create mock client side invocations. En los fragmentos de código siguientes se muestra cómo usar esta interfaz con agentes de prueba populares xUnit.net y MOQ.The following code snippets demonstrate using this interface with popular test harnesses xUnit.net and moq.

Signalr de pruebas unitarias con xUnit.netUnit testing SignalR with xUnit.net

[Fact]
public void HubsAreMockableViaDynamic()
{
    bool sendCalled = false;
    var hub = new MyHub();
    var mockClients = new Mock<IHubCallerConnectionContext>();
    hub.Clients = mockClients.Object;
    dynamic all = new ExpandoObject();
    all.send = new Action<string>(message =>
    {
        sendCalled = true;
    });
    mockClients.Setup(m => m.All).Returns((ExpandoObject)all);
    hub.Send("foo");
    Assert.True(sendCalled);
}

Signalr de pruebas unitarias con MOQUnit testing SignalR with moq

[Fact]
public interface IClientContract
{
    void send(string message);
}
public void HubsAreMockableViaType()
{
    var hub = new MyHub();
    var mockClients = new Mock<IHubCallerConnectionContext>();
    var all = new Mock<IClientContract>();
    hub.Clients = mockClients.Object;
    all.Setup(m => m.send(It.IsAny<string>())).Verifiable();
    mockClients.Setup(m => m.All).Returns(all.Object);
    hub.Send("foo");
    all.VerifyAll();

Control de errores de JavaScriptJavaScript error handling

En Signalr 2,0, todas las devoluciones de llamada de control de errores de JavaScript devuelven objetos de error de JavaScript en lugar de cadenas sin formato.In SignalR 2.0, all JavaScript error handling callbacks return JavaScript error objects instead of raw strings. Esto permite a Signalr fluir información más completa a los controladores de errores.This allows SignalR to flow richer information to your error handlers. Puede obtener la excepción interna de la propiedad source del error.You can get the inner exception from the source property of the error.

Código de cliente de JavaScript que controla la excepción Start. FAILJavaScript client code that handles the Start.Fail exception

connection.start().fail(function(e) {
    console.log('The error is: ' + e.message);
});

ASP.NET IdentityASP.NET Identity

Nuevo sistema de pertenencia de ASP.NETNew ASP.NET Membership System

ASP.NET Identity es el nuevo sistema de pertenencia a aplicaciones ASP.NET.ASP.NET Identity is the new membership system for ASP.NET applications. ASP.NET Identity facilita la integración de datos de perfil específicos del usuario con los datos de la aplicación.ASP.NET Identity makes it easy to integrate user-specific profile data with application data. ASP.NET Identity también le permite elegir el modelo de persistencia para perfiles de usuario en la aplicación.ASP.NET Identity also allows you to choose the persistence model for user profiles in your application. Puede almacenar los datos en una base de datos SQL Server u otro almacén de datos, incluidos los almacenes de datos NoSQL, como Azure Storage tablas.You can store the data in a SQL Server database or another data store, including NoSQL data stores such as Azure Storage Tables. Para obtener más información, consulte cuentas de usuario individuales en crear proyectos Web de ASP.net en Visual Studio 2013.For more information, see Individual User Accounts in Creating ASP.NET Web Projects in Visual Studio 2013.

Autenticación basada en notificacionesClaims-based authentication

ASP.NET ahora admite la autenticación basada en notificaciones, donde la identidad del usuario se representa como un conjunto de notificaciones de un emisor de confianza.ASP.NET now supports claims-based authentication, where the user's identity is represented as a set of claims from a trusted issuer. Los usuarios se pueden autenticar mediante un nombre de usuario y una contraseña que se mantengan en una base de datos de aplicación, o mediante proveedores de identidades sociales (por ejemplo: cuentas de Microsoft, Facebook, Google, Twitter) o mediante cuentas de la organización a través de Azure Active Directory o Servicios de federación de Active Directory (AD FS) (ADFS).Users can be authenticated using a username and password maintained in an application database, or using social identity providers (for example: Microsoft Accounts, Facebook, Google, Twitter), or using organizational accounts through Azure Active Directory or Active Directory Federation Services (ADFS).

Integración con Azure Active Directory y Windows Server Active DirectoryIntegration with Azure Active Directory and Windows Server Active Directory

Ahora puede crear proyectos de ASP.NET que usen Azure Active Directory o Windows Server Active Directory (AD) para la autenticación.You can now create ASP.NET projects that use Azure Active Directory or Windows Server Active Directory (AD) for authentication. Para obtener más información, vea cuentas organizativas en creación de proyectos Web de ASP.net en Visual Studio 2013.For more information, see Organizational Accounts in Creating ASP.NET Web Projects in Visual Studio 2013.

Integración OWINOWIN Integration

La autenticación ASP.NET se basa ahora en middleware OWIN que se puede usar en cualquier host basado en OWIN.ASP.NET authentication is now based on OWIN middleware that can be used on any OWIN-based host. Para obtener más información acerca de OWIN, consulte la siguiente sección de los componentes Owin de Microsoft .For more information about OWIN, see the following Microsoft OWIN Components section.

Componentes de Microsoft OWINMicrosoft OWIN Components

Open Web Interface for .net (OWIN) define una abstracción entre los servidores Web .net y las aplicaciones Web.Open Web Interface for .NET (OWIN) defines an abstraction between .NET web servers and web applications. OWIN desacopla la aplicación web del servidor, lo que permite que las aplicaciones web sean independientes del host.OWIN decouples the web application from the server, making web applications host-agnostic. Por ejemplo, puede hospedar una aplicación web basada en OWIN en IIS o autohospedarla en un proceso personalizado.For example, you can host an OWIN-based web application in IIS or self-host it in a custom process.

Los cambios introducidos en los componentes OWIN de Microsoft (también denominados proyecto Katana) incluyen nuevos componentes de servidor y host, nuevas bibliotecas auxiliares y middleware, y nuevo middleware de autenticación.Changes introduced in the Microsoft OWIN components (also known as the Katana project) include new server and host components, new helper libraries and middleware, and new authentication middleware.

Para obtener más información sobre OWIN y Katana, consulte what's New in Owin and Katana.For more information about OWIN and Katana, see What's new in OWIN and Katana.

Nota: las aplicaciones OWIN no se pueden ejecutar en el modo clásico de IIS; deben ejecutarse en el modo integrado.Note: OWIN applications cannot run in IIS classic mode; they must be run in integrated mode.

Nota: las aplicaciones OWIN deben ejecutarse con plena confianza.Note: OWIN applications must be run in full trust.

Nuevos servidores y hostsNew Servers and Hosts

Con esta versión, se agregaron nuevos componentes para habilitar escenarios de autohospedaje.With this release, new components were added to enable self-host scenarios. Estos componentes incluyen los siguientes paquetes NuGet:These components include the following NuGet packages:

  • Microsoft. Owin. host. HttpListener.Microsoft.Owin.Host.HttpListener. Proporciona un servidor OWIN que usa HttpListener para realizar escuchas de solicitudes HTTP y dirigirlas a la canalización OWIN.Provides an OWIN server that uses HttpListener to listen for HTTP requests and direct them into the OWIN pipeline.
  • Microsoft. Owin. Hosting proporciona una biblioteca para desarrolladores que desean hospedar automáticamente una canalización Owin en un proceso personalizado, como una aplicación de consola o un servicio de Windows.Microsoft.Owin.Hosting Provides a library for developers who wish to self-host an OWIN pipeline in a custom process, such as a console application or Windows service.
  • OwinHost.OwinHost. Proporciona un archivo ejecutable independiente que contiene Microsoft.Owin.Hosting y le permite hospedar automáticamente una canalización OWIN sin tener que escribir una aplicación host personalizada.Provides a stand-alone executable that wraps Microsoft.Owin.Hosting and lets you self-host an OWIN pipeline without having to write a custom host application.

Además, el paquete de Microsoft.Owin.Host.SystemWeb ahora permite que el middleware proporcione sugerencias al servidor SystemWeb , lo que indica que se debe llamar al middleware durante una fase de canalización ASP.net específica.In addition, the Microsoft.Owin.Host.SystemWeb package now enables middleware to provide hints to the SystemWeb server, indicating that the middleware should be called during a specific ASP.NET pipeline stage. Esta característica es especialmente útil para el middleware de autenticación, que se debe ejecutar temprano en la canalización ASP.NET.This feature is particularly useful for authentication middleware, which should run early in the ASP.NET pipeline.

Software intermedio y bibliotecas auxiliaresHelper Libraries and Middleware

Aunque puede escribir componentes OWIN solo con las definiciones de tipo y función de la especificación OWIN, el nuevo paquete de Microsoft.Owin proporciona un conjunto de abstracciones más fácil de usar.Although you can write OWIN components using only the function and type definitions from the OWIN specification, the new Microsoft.Owin package provides a more user-friendly set of abstractions. Este paquete combina varios paquetes anteriores (por ejemplo, Owin.Extensions, Owin.Types) en un modelo de objetos único y bien estructurado que otros componentes OWIN pueden usar fácilmente.This package combines several earlier packages (e.g., Owin.Extensions, Owin.Types) into a single, well-structured object model that can then be easily used by other OWIN components. De hecho, la mayoría de los componentes OWIN de Microsoft ahora usan este paquete.In fact, the majority of Microsoft OWIN components now use this package.

Note

Las aplicaciones OWIN no se pueden ejecutar en el modo clásico de IIS; deben ejecutarse en el modo integrado.OWIN applications cannot run in IIS classic mode; they must be run in integrated mode.

Note

Las aplicaciones OWIN deben ejecutarse con plena confianza.OWIN applications must be run in full trust.

Esta versión también incluye el paquete Microsoft. Owin. Diagnostics, que incluye middleware para validar una aplicación OWIN en ejecución, además de middleware de página de error para ayudar a investigar los errores.This release also includes the Microsoft.Owin.Diagnostics package, which includes middleware to validate a running OWIN application, plus error-page middleware to help investigate failures.

Componentes de autenticaciónAuthentication Components

Están disponibles los siguientes componentes de autenticación.The following authentication components are available.

  • Microsoft. Owin. Security. ActiveDirectory.Microsoft.Owin.Security.ActiveDirectory. Habilita la autenticación mediante servicios de directorio locales o basados en la nube.Enables authentication using on-premise or cloud-based directory services.
  • Microsoft. Owin. Security. cookies permite la autenticación mediante cookies.Microsoft.Owin.Security.Cookies Enables authentication using cookies. Este paquete se llamaba anteriormente Microsoft.Owin.Security.Forms.This package was previously named Microsoft.Owin.Security.Forms.
  • Microsoft. Owin. Security. Facebook permite la autenticación con el servicio basado en OAuth de Facebook.Microsoft.Owin.Security.Facebook Enables authentication using Facebook's OAuth-based service.
  • Microsoft. Owin. Security. Google permite la autenticación con el servicio basado en OpenID de Google.Microsoft.Owin.Security.Google Enables authentication using Google's OpenID-based service.
  • Microsoft. Owin. Security. JWT permite la autenticación mediante tokens JWT.Microsoft.Owin.Security.Jwt Enables authentication using JWT tokens.
  • Microsoft. Owin. Security. MicrosoftAccount permite la autenticación con cuentas Microsoft.Microsoft.Owin.Security.MicrosoftAccount Enables authentication using Microsoft accounts.
  • Microsoft. Owin. Security. OAuth.Microsoft.Owin.Security.OAuth. Proporciona un servidor de autorización de OAuth y un middleware para autenticar los tokens de portador.Provides an OAuth authorization server as well as middleware for authenticating bearer tokens.
  • Microsoft. Owin. Security. Twitter permite la autenticación mediante el servicio basado en OAuth de Twitter.Microsoft.Owin.Security.Twitter Enables authentication using Twitter's OAuth-based service.

Esta versión también incluye el paquete de Microsoft.Owin.Cors, que contiene software intermedio para el procesamiento de solicitudes HTTP entre orígenes.This release also includes the Microsoft.Owin.Cors package, which contains middleware for processing cross-origin HTTP requests.

Note

Se ha quitado la compatibilidad con la firma JWT en la versión final de Visual Studio 2013.Support for JWT signing has been removed in the final version of Visual Studio 2013.

Entity Framework 6Entity Framework 6

Para obtener una lista de las nuevas características y otros cambios en Entity Framework 6, consulte Entity Framework historial de versiones.For a list of new features and other changes in Entity Framework 6, see Entity Framework Version History.

ASP.NET Razor 3ASP.NET Razor 3

ASP.NET Razor 3 incluye las siguientes características nuevas:ASP.NET Razor 3 includes the following new features:

  • Compatibilidad con la edición de pestañas.Support for Tab editing. Anteriormente, el comando dar formato al documento , la sangría automática y el formato automático en Visual Studio no funcionaban correctamente cuando se usa la opción mantener tabulaciones .Previously, the Format Document command, auto indenting, and auto formatting in Visual Studio did not work correctly when using the Keep Tabs option. Este cambio corrige el formato de Visual Studio para el código Razor para el formato de tabulación.This change corrects Visual Studio formatting for Razor code for tab formatting.
  • Compatibilidad con las reglas de reescritura de direcciones URL al generar vínculos.Support for URL Rewrite rules when generating links.
  • Eliminación del atributo transparente en seguridad.Removal of security transparent attribute.

    Note

    Se trata de un cambio importante y hace que Razor 3 sea incompatible con MVC4 y versiones anteriores, mientras que Razor 2 es incompatible con MVC5 o ensamblados compilados con MVC5.This is a breaking change, and makes Razor 3 incompatible with MVC4 and earlier, while Razor 2 is incompatible with MVC5 or assemblies compiled against MVC5.

Los problemas de Razor 3 corregidos en Visual Studio 2013 de versiones preliminares se pueden encontrar aquí.Razor 3 issues fixed in Visual Studio 2013 from pre-release versions can be found here.

Suspensión de la aplicación ASP.NETASP.NET App Suspend

La suspensión de la aplicación ASP.NET es una característica de cambio de juego en el .NET Framework 4.5.1 que cambia radicalmente la experiencia del usuario y el modelo económico para hospedar un gran número de sitios de ASP.NET en un único equipo.ASP.NET App Suspend is a game-changing feature in the .NET Framework 4.5.1 that radically changes the user experience and economic model for hosting large numbers of ASP.NET sites on a single machine. Para obtener más información, consulte suspensión de la aplicación ASP.net: hospedaje Web de .net compartido con capacidad de respuesta.For more information, see ASP.NET App Suspend – responsive shared .NET web hosting.

Problemas conocidos y cambios importantesKnown Issues and Breaking Changes

En esta sección se describen los problemas conocidos y los cambios importantes del ASP.NET and Web Tools para Visual Studio 2013.This section describes known issues and breaking changes in the ASP.NET and Web Tools for Visual Studio 2013.

NuGetNuGet

ASP.NET Web APIASP.NET Web API

  1. ODataQueryOptions<T>.ApplyTo(IQueryable) no devuelve IQueryable<T> siempre, ya que se ha agregado compatibilidad con $select y $expand.ODataQueryOptions<T>.ApplyTo(IQueryable) doesn't return IQueryable<T> always, as we added support for $select and $expand.

    En los ejemplos anteriores de ODataQueryOptions<T> siempre se convierta el valor devuelto de ApplyTo a IQueryable<T>.Our earlier samples for ODataQueryOptions<T> always casted the return value from ApplyTo to IQueryable<T>. Esto funcionó antes porque las opciones de consulta que admitimos anteriormente ($filter, $orderby, $skip``$top) no cambian la forma de la consulta.This worked earlier because the query options that we supported earlier ($filter, $orderby, $skip, $top) do not change the shape of the query. Ahora que se admite $select y $expand el valor devuelto de ApplyTo no se IQueryable<T> siempre.Now that we support $select and $expand the return value from ApplyTo will not be IQueryable<T> always.

    // Sample ODataQueryOptions<T> usage from earlier
    public IQueryable<Customer> Get(ODataQueryOptions<Customer> query)
    {
        IQueryable<customer> result="query.ApplyTo(_customers)" as iqueryable<customer>; return result;
    }
    

    Si utiliza el código de ejemplo anterior, seguirá funcionando si el cliente no envía $select y $expand.If you are using the sample code from earlier, it will continue working if the client does not send $select and $expand. Sin embargo, si desea admitir $select y $expand tiene que cambiar ese código a este.However, if you wish to support $select and $expand you have to change that code to this.

    public IHttpActionResult Get(ODataQueryOptions<Customer> query)
    {
        IQueryable result = query.ApplyTo(_customers);
        return Ok(result, result.GetType());
    }
     
    private IHttpActionResult Ok(object content, Type type)
    {
        Type resultType = typeof(OkNegotiatedContentResult<>).MakeGenericType(type);
        return Activator.CreateInstance(resultType, content, this) as IHttpActionResult;
    }
    
  2. Request. URL o RequestContext. URL es NULL durante una solicitud por lotesRequest.Url or RequestContext.Url is null during a batch request

    En un escenario de procesamiento por lotes, UrlHelper es NULL cuando se accede desde request. URL o RequestContext. URL.In a batching scenario, UrlHelper is null when accessed from Request.Url or RequestContext.Url.

    Actualmente se realiza un seguimiento de este problema: BatchRequestContext. URL es null para la solicitud por lotes.This issue is currently tracked here: BatchRequestContext.Url is null for batching request.

    La solución para este problema es crear una nueva instancia de UrlHelper, como en el ejemplo siguiente:The workaround for this issue is to create a new instance of UrlHelper, as in the following example:

    Crear una nueva instancia de UrlHelperCreating a new instance of UrlHelper

    if (RequestContext.Url == null)
    {
        RequestContext.Url = new UrlHelper(Request);
    }
    

ASP.NET MVCASP.NET MVC

  1. Al usar MVC5 y OrgAuth, si tiene vistas que realizan la validación de AntiForgerToken, podría aparecer el siguiente error al publicar datos en la vista:When using MVC5 and OrgAuth, if you have views which do AntiForgerToken validation, you might come across the following error when you post data to the view:

    Error:Error:

    Error de servidor en la aplicación '/'.Server Error in '/' Application.

    Una demanda de tipo 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier' o 'https://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider' no estaba presente en el ClaimsIdentity proporcionado. Para habilitar la compatibilidad con tokens antifalsificación con la autenticación basada en notificaciones, compruebe que el proveedor de notificaciones configurado está proporcionando ambas notificaciones en las instancias de ClaimsIdentity que genera. Si en su lugar el proveedor de notificaciones configurado usa un tipo de notificación diferente como identificador único, se puede configurar estableciendo la propiedad estática AntiForgeryConfig. UniqueClaimTypeIdentifier.A claim of type 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier' or 'https://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider' was not present on the provided ClaimsIdentity. To enable anti-forgery token support with claims-based authentication, please verify that the configured claims provider is providing both of these claims on the ClaimsIdentity instances it generates. If the configured claims provider instead uses a different claim type as a unique identifier, it can be configured by setting the static property AntiForgeryConfig.UniqueClaimTypeIdentifier.

    Solución alternativa:Workaround:

    Agregue la siguiente línea en global. asax para corregirlo:Add the following line in Global.asax to fix it:

    AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.Name;

    Esto se corregirá en la próxima versión.This will be fixed for the next release.

  2. Después de actualizar una aplicación de MVC4 a MVC5, compile la solución e iníciela.After upgrading an MVC4 app to MVC5, build the solution and launch it. Debería ver el siguiente error:You should see the following error:

    Un System. Web. Webpages. Razor. Configuration. HostSection no se puede convertir en [B] System. Web. Webpages. Razor. Configuration. HostSection.[A]System.Web.WebPages.Razor.Configuration.HostSection cannot be cast to [B]System.Web.WebPages.Razor.Configuration.HostSection. El tipo A se origina en ' System. Web. Webpages. Razor, version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 ' en el contexto ' default ' en la ubicación ' C:\windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.WebPages.Razor\v4.0_2.0.0.0__31bf3856ad364e35 \ System. Web. Webpages. Razor. dll '.Type A originates from 'System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' in the context 'Default' at location 'C:\windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.WebPages.Razor\v4.0_2.0.0.0__31bf3856ad364e35\System.Web.WebPages.Razor.dll'. El tipo B se origina en ' System. Web. Webpages. Razor, version = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 ' en el contexto ' default ' en la ubicación ' C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\6d05bbd0\e8b5908e\assembly\dl3\c9cbca63\f8910382_6273ce01 \ System. Web. Webpages. Razor. dll '.Type B originates from 'System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' in the context 'Default' at location 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\6d05bbd0\e8b5908e\assembly\dl3\c9cbca63\f8910382_6273ce01\System.Web.WebPages.Razor.dll'.

    Para corregir el error anterior, Abra todos los archivos Web. config (incluidos los de la carpeta views) en el proyecto y haga lo siguiente:To fix the above error, open all the Web.config files (including the ones in the Views folder) in your project and do the following:

    1. Actualice todas las apariciones de la versión "4.0.0.0" de "System. Web. MVC" a "5.0.0.0".Update all occurrences of version "4.0.0.0" of "System.Web.Mvc" to "5.0.0.0".

    2. Actualice todas las apariciones de la versión "2.0.0.0" de "System. Web. helpers", "System. Web. Webpages" y "System. Web. Webpages. Razor" a "3.0.0.0"Update all occurrences of version "2.0.0.0" of "System.Web.Helpers", "System.Web.WebPages" and "System.Web.WebPages.Razor" to "3.0.0.0"

      Por ejemplo, después de realizar los cambios anteriores, los enlaces de ensamblado deben tener un aspecto similar al siguiente:For example, after you make the above changes, the assembly bindings should look like this:

      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
      

      Para obtener información sobre cómo actualizar proyectos de MVC 4 a MVC 5, vea Cómo actualizar un proyecto de ASP.NET MVC 4 y Web API a ASP.NET MVC 5 y Web API 2.For information on upgrading MVC 4 projects to MVC 5, see How to Upgrade an ASP.NET MVC 4 and Web API Project to ASP.NET MVC 5 and Web API 2.

  3. Cuando se usa la validación del lado cliente con la validación discreta de jQuery, el mensaje de validación a veces es incorrecto para un elemento de entrada HTML con el tipo = ' número '.When using client-side validation with jQuery Unobtrusive Validation, the validation message is sometimes incorrect for an HTML input element with type='number'. El error de validación de un valor requerido ("el campo Age es obligatorio") se muestra cuando se escribe un número no válido en lugar del mensaje correcto que requiere un número válido.The validation error for a required value ("The Age field is required") is shown when an invalid number is entered instead of the correct message that a valid number is required.

    Este problema suele encontrarse con el código con scaffolding para un modelo con una propiedad de entero en las vistas de creación y edición.This issue is commonly found with scaffolded code for a model with an integer property on the Create and Edit views.

    Para solucionar este problema, cambie la aplicación auxiliar del editor de:To work around this issue, change the editor helper from:

    @Html.EditorFor(person => person.Age)

    A:To:

    @Html.TextBoxFor(person => person.Age)

  4. ASP.NET MVC 5 ya no admite la confianza parcial.ASP.NET MVC 5 no longer supports partial trust. Los proyectos que se vinculan a los binarios MVC o WebAPI deben quitar el atributo SecurityTransparent y el atributo AllowPartiallyTrustedCallers .Projects linking to the MVC or WebAPI binaries should remove the SecurityTransparent attribute and the AllowPartiallyTrustedCallers attribute. Al quitar estos atributos, se eliminarán los errores del compilador como los siguientes.Removing these attributes will eliminate compiler errors such as the following.

    Attempt by security transparent method ‘MyComponent' to access security critical type 'System.Web.Mvc.MvcHtmlString' failed. Assembly 'PagedList.Mvc, Version=4.3.0.0, Culture=neutral, PublicKeyToken=abbb863e9397c5e1' is marked with the AllowPartiallyTrustedCallersAttribute, and uses the level 2 security transparency model. Level 2 transparency causes all methods in AllowPartiallyTrustedCallers assemblies to become security transparent by default, which may be the cause of this exception.

    Tenga en cuenta que, como efecto secundario de esto, no puede usar los ensamblados 4,0 y 5,0 en la misma aplicación.Note, as a side effect of this you cannot use 4.0 and 5.0 assemblies in the same application. Debe actualizar todos ellos a 5,0.You need to update all of them to 5.0.

La plantilla SPA con autorización de Facebook puede provocar inestabilidad en IE mientras el sitio web se hospeda en la zona de intranetSPA Template with Facebook authorization may cause instability in IE while the web site is hosted in intranet zone

La plantilla de SPA proporciona un inicio de sesión externo con Facebook.The SPA template provides external log in with Facebook. Cuando el proyecto creado con la plantilla se ejecuta localmente, el registro de puede hacer que IE se bloquee.When the project created with the template is running locally, signing in may cause IE to crash.

Solución:Solution:

  1. Hospede el sitio web en la zona de Internet; deHost the web site in internet zone; or

  2. Pruebe el escenario en un explorador que no sea Internet Explorer.Test the scenario in a browser other than IE.

Scaffolding de formularios Web FormsWeb Forms Scaffolding

El scaffolding de formularios Web Forms se ha quitado de VS2013 y estará disponible en una actualización futura de Visual Studio.Web Forms Scaffolding has been removed from VS2013 and will be available in a future update to Visual Studio. Sin embargo, todavía puede usar la técnica scaffolding en un proyecto de formularios Web Forms agregando dependencias de MVC y generando scaffolding para MVC.However, you can still use scaffolding within a Web Forms project by adding MVC dependencies and generating scaffolding for MVC. El proyecto contendrá una combinación de formularios Web Forms y MVC.Your project will contain a combination of Web Forms and MVC.

Para agregar MVC al proyecto de formularios Web Forms, agregue un nuevo elemento con scaffolding y seleccione dependencias de MVC 5.To add MVC to your Web Forms project, add a new scaffolded item and select MVC 5 Dependencies. Seleccione mínimo o completo en función de si necesita todos los archivos de contenido, como los scripts.Select either Minimal or Full depending on whether you need all of the content files, such as scripts. Después, agregue un elemento con scaffolding para MVC, que creará vistas y un controlador en el proyecto.Then, add a scaffolded item for MVC, which will create views and a controller in your project.

Scaffolding de MVC y API Web: HTTP 404, error no encontradoMVC and Web API Scaffolding - HTTP 404, Not Found error

Si se produce un error al agregar un elemento con scaffolding a un proyecto, es posible que el proyecto se quede en un estado incoherente.If an error is encountered when adding a scaffolded item to a project, it is possible your project will be left in an inconsistent state. Algunos de los cambios que se realizan son los scaffolding se revertirán, pero otros cambios, como los paquetes de NuGet instalados, no se revertirán.Some of the changes made be scaffolding will be rolled back but other changes, such as the installed NuGet packages, will not be rolled back. Si se revierten los cambios de configuración de enrutamiento, los usuarios recibirán un error HTTP 404 al navegar a elementos con scaffolding.If the routing configuration changes are rolled back, users will receive an HTTP 404 error when navigating to scaffolded items.

Solución:Workaround:

  • Para corregir este error para MVC, agregue un nuevo elemento con scaffolding y seleccione dependencias de MVC 5 (mínimo o completo).To fix this error for MVC, add a new scaffolded item and select MVC 5 Dependencies (either Minimal or Full). Este proceso agregará todos los cambios necesarios en el proyecto.This process will add all of the required changes to your project.

  • Para corregir este error para la API Web:To fix this error for Web API:

    1. Agregue la clase WebApiConfig al proyecto.Add the WebApiConfig class to your project.

      public static class WebApiConfig
      {
          public static void Register(HttpConfiguration config)
          {
              config.MapHttpAttributeRoutes();
              config.Routes.MapHttpRoute(
                  name: "DefaultApi",
                  routeTemplate: "api/{controller}/{id}",
                  defaults: new { id = RouteParameter.Optional }
              );
          }
      }
      
      Public Module WebApiConfig
          Public Sub Register(ByVal config As HttpConfiguration)
              config.MapHttpAttributeRoutes()
              config.Routes.MapHttpRoute(
                name:="DefaultApi",
                routeTemplate:="api/{controller}/{id}",
                defaults:=New With {.id = RouteParameter.Optional}
              )
          End Sub
      End Module
      
    2. Configure WebApiConfig. Register en el método de inicio de la aplicación_en global. asax de la siguiente manera:Configure WebApiConfig.Register in the Application_Start method in Global.asax as follows:

      public class WebApiApplication : System.Web.HttpApplication
      {
          protected void Application_Start()
          {
              GlobalConfiguration.Configure(WebApiConfig.Register);    
          }
      }
      
      Public Class WebApiApplication
           Inherits System.Web.HttpApplication
       
           Sub Application_Start()     
             GlobalConfiguration.Configure(AddressOf WebApiConfig.Register)       
           End Sub
      End Class