TIP: Hashtable to Object

Si bien existen librerias completas para asignar propiedades entre objetos, también es posible asignar de manera automática nuevos valores en pocas líneas de forma recursiva. En este caso se trata de asignar nuevos valores editados en un objeto que, por ejemplo, podremos utilizar para guardar los cambios dentro de Entity Framework. Un escenario común en un Grid:

using System.Data;
using System.Linq;
using System.Reflection;
...

Hashtable nuevosValores;
...

long idBuscado = long.Parse(nuevosValores["id"].ToString());
Coches n = miEntidad.Coches.Where(x => x.id == idBuscado).FirstOrDefault();

foreach (PropertyInfo p in n.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
    // Puede tener propiedades el objecto de la entidad que no se utilizan
    // por ejemplo la relación con otra tabla tambien aparece listada
    if (nuevosValores.ContainsKey(p.Name))
        p.SetValue(n, nuevosValores[p.Name]);
}

miEntidad.SaveChanges();

Un ejemplo sencillo del uso de la reflexión en los objectos.

PrincipalId webapp Azure

PrincipalId webapp Azure

El acceso a propiedades de objeto Identity desde línea de comandos en PowerShell para Azure debería obtenerse mediante:

Get-AzWebApp -ResourceGroupName "NombreDeRecursos" -Name "NombreAplicacionWeb"
--$appId=(Get-AzWebApp -ResourceGroupName $resourcegroupname -Name $webappname).Identity.PrincipalId
--$appId=(Get-AzureRmWebApp $resourcegroupname -Name $webappname).Identity.PrincipalId

No tenemos acceso a estos identificadores, podemos utilizar en su lugar el acceso mediante Service Managed Identity:

az webapp identity assign -g $resourcegroupname -n $webappname 

Del que obtendremos el identificador necesario:

{- Finished ..
  "principalId": "b1dd98c4-eae0-4fea-8e46-efzs563dc9630",
  "tenantId": "504c8804-c8a6-9090-8fzs-e35841104187",
  "type": "SystemAssigned",
  "userAssignedIdentities": null
}

Con la administración de identidades administradas habilitadas y permitiendo al acceso a los recursos a la aplicación, ya podemos utilizar tokens de acceso Oauth. De este modo solo se puede acceder a este extremo desde el código que se ejecuta en el servicio de la aplicación, por ejemplo, solo nuestro sitio web puede obtener tokens de acceso.

Descargar archivos grandes desde Azure Storage con Firmas de acceso compartido (SAS) – SDK v12

Descargar archivos grandes desde Azure Storage con Firmas de acceso compartido (SAS) – SDK v12

Si bien el funcionamiento es similar a la v11, se utiliza la librería Azure.Storage.Blobs de código abierto en lugar del paquete WindowsAzure.Storage:

AccountSasBuilder sasBuilder = new AccountSasBuilder()
{
    Services = AccountSasServices.Blobs | AccountSasServices.Files,
    ResourceTypes = AccountSasResourceTypes.All,
    ExpiresOn = DateTimeOffset.UtcNow.AddHours(1),
    Protocol = SasProtocol.Https
};

sasBuilder.SetPermissions(AccountSasPermissions.Read); // | AccountSasPermissions.Write

StorageSharedKeyCredential key = new StorageSharedKeyCredential("MiNombreDeCuenta","MiClaveDeCuenta"));

// Generar a partir de la clave de acceso, el token SAS:
string sasToken = sasBuilder.ToSasQueryParameters(key).ToString();

// Generar la dirección URL completa incluyendo el token SAS:
UriBuilder fullUri = new UriBuilder()
{
    Scheme = "https",
    Host = string.Format("{0}.blob.core.windows.net", CloudConfigurationManager.GetSetting("accountName")),
    Path = string.Format("{0}/{1}", nombreContainer, nombreArchivo),
    Query = sasToken
};
				
Response.Redirect(fullUri.Uri)

De este modo mantenemos de forma más segura el acceso a ficheros dentro de containers con control de tiempo de expiración y permisos de usuario.

.NET 5: un Framework para todo

.NET 5: un Framework para todo

En 2002 apareció la primera versión de .NET, han pasado casi 20 años y el escenario de desarrollo de aplicaciones monolíticas ha ido diversificándose: microservicios distribuidos, aplicaciones multiplataforma, dispositivos IoT, inteligencia artificial, virtualización, contenedores… El contexto y requerimientos ha cambiado, como todo en informática, ¿Quién se imaginaría a comienzos de siglo que Microsoft sería miembro de Linux Foundation y .NET pasaría a ser Open Source?

Leer más

Evaluar migración a .NET Core

Tarde o temprano nos encontraremos con la migración de frameworks/tecnologías y .NET no iba a ser una excepción. Utilizaremos la herramienta .NET Portability Analyzer para un primer vistazo a nuestras librerías y aplicaciones teniendo como objetivo aplicaciones multiplataforma, microservicios, dockers… en la nube.

Debemos tener claro antes de empezar, la recomendación general de Microsoft actualmente es utilizar .NET Core si tenemos que añadir nuevas funcionalidades en background, por el momento .NET Framework y .NET Core son complementarias. La mayor parte de las API de .NET Core se comparten con .NET Framework

Aclarado esto, con la extensión para Visual Studio 2019 instalada ya podemos iniciar el análisis que nos ayudará a identificar las dependencias externas. Dentro de la configuración de la extensión podemos fijar nuestro objetivo. Todas las acciones tienen su equivalente en línea de comandos.

Leer más