Nosabit.NetReact 1.2.4

dotnet add package Nosabit.NetReact --version 1.2.4
                    
NuGet\Install-Package Nosabit.NetReact -Version 1.2.4
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Nosabit.NetReact" Version="1.2.4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Nosabit.NetReact" Version="1.2.4" />
                    
Directory.Packages.props
<PackageReference Include="Nosabit.NetReact" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Nosabit.NetReact --version 1.2.4
                    
#r "nuget: Nosabit.NetReact, 1.2.4"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#addin nuget:?package=Nosabit.NetReact&version=1.2.4
                    
Install Nosabit.NetReact as a Cake Addin
#tool nuget:?package=Nosabit.NetReact&version=1.2.4
                    
Install Nosabit.NetReact as a Cake Tool

Nosabit.NetReact

Una biblioteca que facilita la integración entre ASP.NET Core y aplicaciones React, proporcionando extensiones, atributos personalizados y utilidades para mejorar el desarrollo de aplicaciones web modernas.

NuGet License: MIT

Instalación

Package Manager

Install-Package Nosabit.NetReact

.NET CLI

dotnet add package Nosabit.NetReact

PackageReference

<PackageReference Include="Nosabit.NetReact"  />

Características principales

  • Codificación y decodificación de parámetros: Oculta y procesa parámetros en URLs
  • Mensajería entre páginas: Sistema para mostrar mensajes entre redirecciones
  • Atributos personalizados: Facilita la integración de ASP.NET Core con React
  • Procesamiento de archivos: Extensiones para trabajar con archivos de formulario y Excel
  • Automatización de NPM: Manejo de scripts NPM durante el desarrollo
  • Extensiones de sesión: Simplifica el almacenamiento de objetos complejos en sesión
  • Tag Helpers: Componentes para mostrar mensajes y otros elementos en Razor Pages

Ejemplos de uso

Codificación y decodificación de parámetros

// Ocultar un valor en una URL
string valorOculto = FromQueryEncode.Hidden(123);
// Resultado: Base64 de "[ocultar]_123"

// En un controlador, usar el atributo para decodificar automáticamente
public class MiControlador : Controller
{
    public IActionResult Detalle([FromQueryDecode] int id)
    {
        // El valor ya viene decodificado automáticamente
        return View(id);
    }
}

Mensajería entre páginas

// En un controlador o Razor Page, guardar un mensaje
TempData.CrearMensaje("Operación completada con éxito", "/destino", 1);
// 1 = Éxito, 0 = Info, -1 = Error

// Si ocurre una excepción
try
{
    // Código que puede fallar
}
catch (Exception ex)
{
    TempData.CrearMensaje(ex, "/destino");
    return RedirectToPage("/destino");
}

// En la página de Razor (cshtml), mostrar el mensaje automáticamente
<Message-App />

Atributos React

// Marcar una página para usar propiedades React
[React]
public class MiPaginaModel : PageModel
{
    // Propiedades que se pasarán a React
    [ReactProp]
    public string Titulo { get; set; } = "Mi título";
    
    // Resto del código...
}

Procesamiento de archivos Excel

// En un controlador que recibe un archivo Excel
[HttpPost]
public IActionResult ProcesarExcel(IFormFile archivo)
{
    if (archivo != null)
    {
        // Convertir el Excel a una colección de DataTable
        DataTableCollection tablas = archivo.ExcelToTables();
        
        // Procesar la primera tabla
        DataTable primeraHoja = tablas[0];
        foreach (DataRow fila in primeraHoja.Rows)
        {
            // Procesar cada fila...
        }
    }
    
    return Ok();
}

Extensiones de sesión para objetos complejos

// Guardar un objeto complejo en la sesión
MiClase miObjeto = new MiClase { Propiedad = "Valor" };
HttpContext.Session.Set("miObjeto", miObjeto);

// Recuperar el objeto de la sesión
MiClase? objetoRecuperado = HttpContext.Session.Get<MiClase>("miObjeto");

Devolver JavaScripts dinámicos

public class MiControlador : Controller
{
    public IActionResult ObtenerScript()
    {
        string scriptDinamico = "alert('Hola mundo');";
        return new JavaScriptResult(scriptDinamico);
    }
}

Configuración para manejo de NPM en desarrollo

// En Program.cs
var builder = WebApplication.CreateBuilder(args);
// Añadir servicios...

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    // Esto ejecutará automáticamente "npm run start" durante el desarrollo
    app.NpmScript("start");
}

// El resto de la configuración...

Adición de cabeceras para descarga de archivos

// En un controlador que devuelve un archivo
[HttpGet]
public IActionResult DescargarArchivo()
{
    byte[] datos = ObtenerDatosArchivo();
    Response.Headers.AddResponseFile("mi-archivo.pdf");
    return File(datos, "application/pdf");
}

// Para mostrar en lugar de descargar
[HttpGet]
public IActionResult VerArchivo()
{
    byte[] datos = ObtenerDatosArchivo();
    Response.Headers.AddResponseFile("mi-archivo.pdf", true); // true = solo visualizar
    return File(datos, "application/pdf");
}

Uso de EndpointSlice para controladores anidados

// Definición de un controlador anidado con EndpointSlice
[EndpointSlice]
public class ProductoController : ControllerBase
{
    [HttpGet("api/productos")]
    public IActionResult ObtenerTodos()
    {
        // Implementación...
    }
}

// Habilitar el proveedor de características mejorado automáticamente 
builder.AddWebApiBuilder(UseEndpointSlice: true);

Uso de WebBuilderAppExtension para configurar aplicaciones ASP.NET Core

// Configuración de una aplicación Web API
var builder = WebApplication.CreateBuilder(args);

// Configurar servicios optimizados y Web API
builder
    .AddAppSettingsGlobal()
    .AddWebOptimizeBuilder()
    .AddWebApiBuilder(AddCors: true);

// Agregar servicios personalizados
builder.AddServicesBuilder(services =>
{
    services.AddScoped<IMiServicio, MiServicio>();
    // Más registros de servicios...
});

var app = builder.Build();

// Configurar middleware
app
    .UseWebOptimizeBuilder()
    .UseWebApiConfiguration()
    .UseWebApiDocumentation();

// Configuración personalizada
app.UseAppBuilder(appInstance =>
{
    // Configuración personalizada...
});

app.Run();

Configuración de una aplicación React

// Configuración de una aplicación React con ASP.NET Core
var builder = WebApplication.CreateBuilder(args);

// Configurar servicios
builder
    .AddAppSettingsGlobal()
    .AddWebOptimizeBuilder()
    .AddWebAppBuilder(AzureAuthAd: false);

var app = builder.Build();

// Configurar middleware
app
    .UseWebOptimizeBuilder()
    .UseReactWebAppConfiguration();

app.Run();

Componentes principales

App

  • FromQueryDecode.cs: Decodifica parámetros ocultos en URLs
  • MensajeriaApp.cs: Sistema de mensajes entre redirecciones usando TempData

Attributes

  • EndpointSliceAttribute.cs: Permite controladores anidados
  • FromQueryDecodeAttribute.cs: Atributo para decodificar parámetros automáticamente
  • ReactAttribute.cs: Marca páginas para usar con React
  • ReactProp.cs: Marca propiedades para pasar a React

Extensions

  • IFormFileExtension.cs: Extensiones para procesar archivos de formulario y Excel
  • JavaScriptResult.cs: Clase para devolver JavaScript como resultado de acción
  • NpmScriptExtension.cs: Automatiza la ejecución de scripts NPM durante desarrollo
  • ReponseHeadersExtension.cs: Añade cabeceras para descarga de archivos
  • SessionAppExtensions.cs: Simplifica el almacenamiento de objetos en sesión
  • WebBuilderAppExtension.cs: Facilita la configuración de aplicaciones ASP.NET Core

Integración con Nosabit.Core

Este paquete funciona mejor cuando se usa junto con Nosabit.Core, que proporciona utilidades adicionales como extensiones para manejo de fechas, cadenas y seguridad.

Requisitos

  • .NET 6.0 o superior
  • ASP.NET Core
  • ExcelDataReader (para funcionalidades de Excel)

Licencia

Este proyecto está licenciado bajo la Licencia MIT.

Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.2.4 131 9 days ago
1.2.2 464 16 days ago
1.2.1 151 18 days ago
1.2.0 138 19 days ago
1.1.7 61 19 days ago
1.1.6 97 20 days ago
1.1.5 98 20 days ago
1.1.4 102 20 days ago
1.1.3 105 20 days ago
1.1.2 101 20 days ago
1.1.1 107 20 days ago
1.1.0 108 20 days ago
1.0.4 132 21 days ago
1.0.3 130 22 days ago
1.0.2 133 22 days ago
1.0.1 131 23 days ago
1.0.0 137 24 days ago