0

.Net, ASP.NET y Entity Framework 7 Release Candidate 1 #1

Estamos en la recta final para tener la nueva versión de .Net disponible para nuestras aplicaciones. ¡En esta ocasión les traigo la información disponible sobre las partes principales de .NET, Veamos!

No hay que olvidar que llega la .NET Conf 2022 del 8 al 10 de noviembre de 2022 para celebrar el lanzamiento de .NET 7!

.Net Release Candidate 1

.NET MAUI

.NET Multi-platform App UI (MAUI) unifica las API de Android, iOS, macOS y Windows en una sola API para que puedamos escribir una aplicación que se ejecute de forma nativa en muchas plataformas. 

Recordemos que .NET MAUI permite ofrecer las mejores experiencias de aplicaciones diseñadas específicamente para cada plataforma (Android, iOS, macOS, Windows y Tizen) al mismo tiempo que permite crear una experiencia de marca consistente a través de un estilo y gráficos enriquecidos. Fuera de la caja, cada plataforma se ve y se comporta como debería sin necesidad de widgets o estilos adicionales.

En .NET 7, .NET MAUI tendremos un proyecto único que maneja la segmentación múltiple en dispositivos y sus plataformas. Mas info:

Cloud  Native

Cloud native es un conjunto de mejores prácticas para crear sus aplicaciones en la nube para aprovechar la resiliencia, la escalabilidad, la eficiencia y la velocidad. En esta versión de .NET tenemos más opciones para crear aplicaciones nativas en la nube.  Mas info:

ARM64

ARM proporciona un factor de forma pequeño con un rendimiento excepcional y una alta eficiencia energética. Con .NET podremos crear crear aplicaciones para ejecutarlas en dispositivos ARM. Más info:

Modernization

Debemos tener presente que usar las últimas versiones nos da las ventajas de aprovechar el rendimiento ultrarrápido con una gran cantidad de características nuevas que mejoran la calidad de vida de su desarrollador.

 .NET brinda una experiencia guiada paso a paso para modernizar nuestras aplicaciones .NET mediante el análisis y la actualización de nuestros archivos de proyecto, archivos de código y dependencias. Esto crea una experiencia más fluida mientras estamos actualizando. Más Info:

Performance

.NET 7 es el más rápido hasta el momento. Más de mil mejoras impactantes en el rendimiento se incorporaron a la reflexión de impacto de .NET 7, el reemplazo en la pila (OSR), el tiempo de inicio, el AOT nativo, las optimizaciones de bucle y muchas otras áreas. Más info:

ASP.Net Core 7 Release Candidate 1

Solicitudes de autenticación dinámica en Blazor WebAssembly

Blazor proporciona soporte inmediato para la autenticación mediante OpenID Connect y una variedad de proveedores de identidad, incluidos Azure Active Directory (Azure AD) y Azure AD B2C. En .NET 7, Blazor ahora admite la creación de solicitudes de autenticación dinámicas en tiempo de ejecución con parámetros personalizados para manejar escenarios de autenticación más avanzados en aplicaciones Blazor WebAssembly. Para especificar parámetros adicionales, use el nuevo tipo InteractiveRequestOptions y los métodos auxiliares NavigateToLogin en NavigationManager.

Por ejemplo, podemos especificar una sugerencia de inicio de sesión para el proveedor de identidad sobre quién autenticarse de esta manera:

InteractiveRequestOptions requestOptions = new()
{
    Interaction = InteractionType.SignIn,
    ReturnUrl = NavigationManager.Uri,
};
requestOptions.TryAddAdditionalParameter("login_hint", "user@example.com");
NavigationManager.NavigateToLogin("authentication/login", requestOptions);

De manera similar, podemos especificar el parámetro de aviso de OpenID Connect, como cuando deseamos forzar un inicio de sesión interactivo:

InteractiveRequestOptions requestOptions = new()
{
    Interaction = InteractionType.SignIn,
    ReturnUrl = NavigationManager.Uri,
};
requestOptions.TryAddAdditionalParameter("prompt", "login");
NavigationManager.NavigateToLogin("authentication/login", requestOptions);

Podemos especificar estas opciones cuando use IAccessTokenProvider directamente para solicitar tokens:

var accessTokenResult = await AccessTokenProvider.RequestAccessToken(
    new AccessTokenRequestOptions
    {
        Scopes = new[] { "SecondAPI" }
    });

if (!accessTokenResult.TryGetToken(out var token))
{
    accessTokenResult.InteractionOptions.TryAddAdditionalParameter("login_hint", "user@example.com");
    NavigationManager.NavigateToLogin(accessTokenResult.InteractiveRequestUrl, accessTokenResult.InteractionOptions);
}

Por otro lado, podemos especificar opciones de solicitud de autenticación cuando AuthorizationMessageHandler no podamos adquirir un token sin la interacción del usuario:

try
{
    await Http.GetAsync("/orders");

}
catch (AccessTokenNotAvailableException ex)
{
    ex.Redirect(requestOptions =>
    {
        requestOptions.TryAddAdditionalParameter("login_hint", "user@example.com");
    });
}

Cualquier parámetro adicional especificado para la solicitud de autenticación se pasará a la biblioteca de autenticación subyacente, que luego los manejará.

Nota: La especificación de parámetros adicionales para msal.js aún no está completamente implementada, pero se espera que se complete pronto para una próxima versión.

Manejar eventos de cambio de ubicación

Blazor en .NET 7 es compatible con el manejo de eventos de cambio de ubicación. Esto le permite advertir a los usuarios sobre el trabajo no guardado o realizar acciones relacionadas cuando el usuario realiza una navegación de página.

Para manejar eventos de cambio de ubicación, registramos un controlador con el servicio NavigationManager mediante el método RegisterLocationChangingHandler. Luego, nuestro controlador puede realizar un trabajo asincrónico en una navegación o elegir cancelar la navegación llamando a PreventNavigation en LocationChangingContext. RegisterLocationChangingHandler devuelve una instancia de IDisposable que, cuando se elimina, elimina el controlador de cambio de ubicación correspondiente.

Por ejemplo, el siguiente controlador impide la navegación a la página del contador:

var registration = NavigationManager.RegisterLocationChangingHandler(async context =>
{
    if (context.TargetLocation.EndsWith("counter"))
    {
        context.PreventNavigation();
    }
});

Debemos tener en cuenta que solo se llamará a nuestro controlador para navegaciones internas dentro de la aplicación. Las navegaciones externas solo se pueden manejar de forma síncrona mediante el evento beforeunload en JavaScript.

El nuevo componente NavigationLock facilita los escenarios comunes para manejar eventos de cambio de ubicación. NavigationLock expone una devolución llamada OnBeforeInternalNavigation que podemos usar para interceptar y manejar eventos de cambio de ubicación internos. Si desea que los usuarios también confirmen las navegaciones externas, puede usar la propiedad ConfirmExternalNavigations, que conectará el evento beforeunload por usted y activará el aviso específico del navegador.

<EditForm EditContext="editContext" OnValidSubmit="Submit">
    ...
</EditForm>
<NavigationLock OnBeforeInternalNavigation="ConfirmNavigation" ConfirmExternalNavigation />

@code {
    private readonly EditContext editContext;

    ...

    // Called only for internal navigations
    // External navigations will trigger a browser specific prompt
    async Task ConfirmNavigation(LocationChangingContext context)
    {
        if (editContext.IsModified())
        {
            var isConfirmed = await JS.InvokeAsync<bool>("window.confirm", "Are you sure you want to leave this page?");

            if (!isConfirmed)
            {
                context.PreventNavigation();
            }
        }
    }
}

Mejoras en la depuración de Blazor WebAssembly

La depuración de Blazor WebAssembly en .NET 7 ahora tiene las siguientes mejoras:

  • Compatibilidad con la configuración Solo mi código para mostrar u ocultar miembros de tipo que no pertenecen al código de usuario.
  • Compatibilidad con la inspección de matrices multidimensionales
  • Call Stack ahora muestra el nombre correcto para los métodos asíncronos
  • Evaluación de expresión mejorada
  • Manejo correcto de nueva palabra clave en miembros derivados
  • Compatibilidad con atributos relacionados con el depurador en System.Diagnostics

Herramientas de compilación .NET WebAssembly para proyectos .NET 6

Podemos usar las herramientas de compilación de .NET WebAssembly con un proyecto de .NET 6 cuando trabaje con el SDK de .NET 7. La nueva carga de trabajo wasm-tools-net6 incluye las herramientas de compilación .NET WebAssembly para proyectos .NET 6 para que puedan usarse con el SDK de .NET 7. Para instalar la nueva carga de trabajo wasm-tools-net6, ejecutemos el siguiente comando desde un símbolo del sistema elevado:

dotnet workload install wasm-tools-net6

La carga de trabajo existente de herramientas wasm instala las herramientas de compilación .NET WebAssembly para proyectos .NET 7. Sin embargo, la versión .NET 7 de las herramientas de compilación de .NET WebAssembly son incompatibles con los proyectos existentes creados con .NET 6. Los proyectos que usan las herramientas de compilación de .NET WebAssembly que deben ser compatibles con .NET 6 y .NET 7 necesitarán usar múltiples -focalización.

Conclusiones

Esta primera Release candidate ha traído más novedades en ASP.NET que en las otras partes. Como comentamos antes, estamos en la recta final esperando la segunda release candidate, como también, la .Net conf en Noviembre.

Fernando Sonego

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *