Compartir vía


Novedades de ASP.NET Web API 2.2

Por Microsoft

En este tema, se describen las novedades de ASP.NET Web API 2.2.

Descargar

Las características en tiempo de ejecución se publican como paquetes NuGet en la galería de NuGet. Todos los paquetes en tiempo de ejecución siguen la especificación de control de versiones semántico. El paquete ASP.NET Web API 2.2 más reciente tiene la siguiente versión: "5.2.0". Puede instalar o actualizar estos paquetes mediante NuGet. La versión también incluye los paquetes localizados correspondientes en NuGet.

Puede instalar o actualizar los paquetes NuGet publicados mediante la consola del Administrador de paquetes NuGet:

Install-Package Microsoft.AspNet.WebApi -Version 5.2.0

Documentación

Los tutoriales y otra información sobre ASP.NET Web API 2.2 están disponibles en el sitio web de ASP.NET ( https://www.asp.net/web-api).

Nuevas características de ASP.NET Web API 2.2

OData v4

Esta versión agrega compatibilidad con el protocolo OData v4. Para obtener más información, consulte la documentación de OData v4 de Web API.

Estas son algunas de las características y cambios clave de OData v4:

Mejoras en el enrutamiento de atributos

El enrutamiento de atributos ahora proporciona un punto de extensibilidad llamado IDirectRouteProvider, que permite un control total sobre cómo se detectan y configuran las rutas de atributo. IDirectRouteProvider es responsable de proporcionar una lista de acciones y controladores junto con la información de ruta asociada para especificar exactamente qué configuración de enrutamiento se desea para esas acciones. Se puede especificar una implementación de IDirectRouteProvider al llamar a MapAttributes/MapHttpAttributeRoutes.

La personalización de IDirectRouteProvider será más fácil al extender nuestra implementación predeterminada, DefaultDirectRouteProvider. Esta clase proporciona métodos virtuales reemplazables independientes para cambiar la lógica para detectar atributos, crear entradas de ruta y detectar prefijos de ruta y prefijos de área.

A continuación, se muestran algunos ejemplos sobre lo que puede hacer con este nuevo punto de extensibilidad:

  1. Compatibilidad con la herencia de atributos de ruta

    Ejemplo:

    Aquí, una solicitud como "/api/values/10" devolvería correctamente "Success:10"

    public class BaseController : ApiController
    {
        [Route("{id:int}")]
        public string Get(int id)
        {
            return "Success:" + id;
        }
    }
    [RoutePrefix("api/values")]
    public class ValuesController : BaseController
    {
    }
           
    config.MapHttpAttributeRoutes(new CustomDirectRouteProvider());
    public class CustomDirectRouteProvider : DefaultDirectRouteProvider
    {
        protected override IReadOnlyList<IDirectRouteFactory> 
        GetActionRouteFactories(HttpActionDescriptor actionDescriptor)
        {
            return actionDescriptor.GetCustomAttributes<IDirectRouteFactory>
            (inherit: true);
        }
    }
    
  2. Proporcione un nombre de ruta predeterminado para las rutas de atributo siguiendo algunas convenciones que desee. De manera predeterminada, el enrutamiento de atributos no crea automáticamente nombres para las rutas de atributo.

  3. Modifique la plantilla de ruta de las rutas de atributo en un lugar central antes de que terminen en la tabla de rutas.

Compatibilidad del cliente de API web con Windows Phone 8.1

Ahora, puede usar el paquete NuGet del cliente de API web para implementar la lógica de cliente de la API web cuando el destino es Windows Phone 8.1 o desde una aplicación universal.

Problemas conocidos y cambios importantes

En esta sección, se describen los problemas conocidos y los cambios importantes en ASP.NET Web API 2.2.

OData v4

Generador de modelos

Problema: las funciones sobrecargadas no se podían exponer como FunctionImport

Si hay 2 funciones sobrecargadas que también son FunctionImport como se muestra a continuación, la solicitud de ~/GetAllConventionCustomers(CustomerName={customerName}) da como resultado System.InvalidOperationException.

<Function Name="GetAllConventionCustomers" 
ReturnType="Collection(WebStack.QA.Test.OData.UnboundOperation.ConventionCustomer)" 
IsComposable="true" />
<Function Name="GetAllConventionCustomers" 
ReturnType="Collection(WebStack.QA.Test.OData.UnboundOperation.ConventionCustomer)" 
IsComposable="true">
<Parameter Name="CustomerName" Type="Edm.String" FixedLength="false" 
Unicode="false" />
</Function>
...
<FunctionImport Name="GetAllConventionCustomers" 
Function="WebStack.QA.Test.OData.UnboundOperation.GetAllConventionCustomers" 
EntitySet="ConventionCustomers" IncludeInServiceDocument="true" />

Solución alternativa: la solución alternativa para este problema es agregar las sobrecargas de función como FunctionImports.

Enrutamiento de OData

Los literales de cadena que incluyen la barra diagonal con codificación URL (%2F) y las barras diagonales inversas (%5C) provocan un error 404 cuando se usan en las rutas de acceso de recursos de OData.

Por ejemplo, los literales de cadena se pueden usar en las rutas de acceso de recursos de OData como parámetros de funciones o valores de clave de conjuntos de entidades.

/Employees/Total.GetCount(Name='Name%2F')

/Employees('Name%5C')

Cuando los servicios reciben estas solicitudes, los hosts anularán el escape de esas secuencias de escape antes de pasarlas al entorno de ejecución de la API web. Esto protege contra ataques como los siguientes:

http://www.contoso.com/..%2F..%2F/Windows/System32/cmd.exe?/c+dir+c:

Esto hace que la pila de OData de la API web devuelva un error 404 (No encontrado). Para evitar este error, el cliente debe usar las secuencias de escape dobles para la barra diagonal (%252F) y la barra diagonal inversa (%255C). Esto no sucede para cadenas de consulta como /Employees?$filter=Name eq 'Name%2F'

Tenga en cuenta que las barras diagonales sin escape ("/") y las barras diagonales inversas ("") no son legales en los literales de cadena de ruta de acceso de recursos de OData. Las barras diagonales solo deben aparecer como separadores de ruta de acceso y las barras diagonales inversas no deben aparecer en la ruta de acceso de recursos de OData. (Se pueden usar ambas en algunas partes de una cadena de consulta de OData).

Solución alternativa: puede invalidar el método Parse de DefaultODataPathHandler para escapar la barra diagonal y la barra diagonal inversa en los literales de cadena antes de analizarlos realmente. Puede encontrar un ejemplo de este enfoque aquí.

OData v3

[Queryable]

El atributo [Queryable] está en desuso. Las nuevas aplicaciones de OData v3 deben usar System.Web.Http.OData.EnableQueryAttribute.

El método de extensión ODataHttpConfigurationExtensions.EnableQuerySupport ahora agrega un elemento EnableQueryAttribute a la colección de filtros global. Si algún controlador tiene el atributo [Queryable], la llamada a config.EnableQuerySupport() hará que se produzca un error en el atributo [Queryable].

La manera recomendada de resolver este problema es reemplazar todas las instancias de QueryableAttribute por System.Web.Http.OData.EnableQueryAttribute.

Una solución alternativa consiste en usar el código siguiente en la configuración de la API web:

config.EnableQuerySupport(new QueryableAttribute());

Enrutamiento de atributos

Problema: un enlace de modelos de tipo complejo que está decorado con el atributo FromUri se comporta de forma diferente al usar el enrutamiento de atributos.

Problema: aplicar scaffolding de MVC/Web API a un proyecto con paquetes 5.2.0 da como resultado paquetes 5.1.2 para los que aún no existen en el proyecto

La actualización de paquetes NuGet para ASP.NET MVC 5.2 no actualiza las herramientas de Visual Studio, como el scaffolding de ASP.NET o la plantilla de proyecto de aplicación web de ASP.NET. Usan la versión anterior de los paquetes en tiempo de ejecución de ASP.NET (por ejemplo, 5.1.2 en la actualización 2). Como resultado, el scaffolding de ASP.NET instalará la versión anterior (por ejemplo, 5.1.2 en la actualización 2) de los paquetes necesarios, si aún no están disponibles en los proyectos. Sin embargo, el scaffolding de ASP.NET en Visual Studio 2013 RTM o la actualización 1 no sobrescribe los paquetes más recientes de los proyectos. Si usa el scaffolding de ASP.NET después de actualizar los paquetes de los proyectos a Web API 2.2 o ASP.NET MVC 5.2, asegúrese de que las versiones de Web API y ASP.NET MVC sean coherentes.

Microsoft.AspNet.OData 5.2.1

El paquete Microsoft.AspNet.OData 5.2.1 contiene actualizaciones de dependencias de NuGet, pero no hay correcciones de errores. Con esta actualización, ya no hay una dependencia estricta de Microsoft.OData.Core 6.4.0, pero se puede actualizar a cualquier versión entre la 6.4.0 y la 7.0.0.

Microsoft.AspNet.WebAPI 5.2.2

En esta versión, hemos realizado un cambio de dependencias para Json.Net 6.0.4. Para obtener más información sobre las novedades de esta versión de Json.NET, consulte Json.NET 6.0 versión 4: combinación de JSON, inserción de dependencias. Esta versión no tiene ninguna otra característica nueva ni correcciones de errores en Web API. Posteriormente, se han actualizado todos los demás paquetes dependientes que tenemos para que dependan de esta nueva versión de Web API.

Microsoft.AspNet.WebAPI 5.2.3 Beta

Puede leer sobre la versión aquí. Esta versión solo contiene correcciones de errores.