
Si desarrollas APIs, probablemente utilizarás Postman, Fiddler o herramientas similares para probarlas. Cualquier utilidad capaz de lanzar peticiones y analizar la respuesta, incluso basadas en línea de comandos como el desconocido Dotnet HTTP REPL, viene de perlas para ponernos en el lugar del cliente y comprobar cómo responde nuestra API ante determinados parámetros de entrada, o qué se siente al consumirla.
Tiempo atrás, el descubrimiento de la extensión REST client para Visual Studio Code supuso una bocanada de aire fresco en la forma de lanzar peticiones y examinar respuestas, para mi gusto mucho más cómoda que las que estaba acostumbrado a utilizar. Esta extensión permite definir peticiones HTTP en archivos de texto con extensión .http
o .rest
y ejecutarlas de forma realmente sencilla, sin abandonar el IDE.
Pues bien, la última revisión de Visual Studio 2022 (17.5) ha incluido el soporte nativo para este tipo de archivos, así que cada vez lo tenemos más sencillo. Y como es posible que alguno de vosotros aún no lo conozca, vamos a echarle un vistazo ;)
Publicado por José M. Aguilar a las 8:05 a. m.
Etiquetas: apis, herramientas, vs2022

Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Programadores con producción neta negativa (NNPP)
José María Aguilar - Trimming de espacios no significativos en Blazor 5
José María Aguilar
.NET Core / .NET
- Get Seamless Network Communication with These .NET Classes
Admir Mujkic - C# Tip: Initialize lists size to improve performance
Davide Bellone - How to Improve Enums With the SmartEnum Library
Code Maze - Extending the System Menu to add advanced commands in .NET
Gérald Barré - What To Be Wary of With Iterators and Collections in C#
Nick Cosentino - Raw Strings, UTF-8 Strings, and Multiline Interpolations – Using C# 11 in Rider and ReSharper
Sasha Ivanova - C# FileStream For Lazy Developers In A Hurry. The Bare Minimum
Gus Pear - Resiliency with Wolverine
Jeremy D. Miller - Speed Up ASP.NET Core JSON APIs with Source Generators
Khalid Abuhakmeh - IEnumerable, ICollection, IList and List
Code Maze - Write a high-quality README for NuGet packages
Lynn Dai - Microsoft Teams' Permission Service migration to .NET 6
Diogo Barbosa

Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Iterar con foreach sobre cualquier tipo de objeto con C#9
José María Aguilar - Visualizar archivos de ayuda .CHM descargados de Internet
José María Aguilar
.NET Core / .NET
- C#: enum
Fernando Escolar - Announcing .NET 8 Preview 1
Jeremy Likness - error NETSDK1194: The "--output" option isn't supported when building a solution.
Steven Giesel - Building Functional .NET Applications: a Guide for Choosing between Nahla Davies & Daniel Bryant
- How safe are .NET serialization libraries against StackOverflowException
Nemanja Mijailovic - Refactoring huge C# code base in minutes
Laurent Kempé - Creating a custom Main method in a WPF application
Gérald Barré - List and Span Pattern Matching – Using C# 11 in Rider and ReSharper
Sasha Ivanova - Create Clean Guard Clauses With GuardClauses in C# Code Maze
Code Maze - Resolving the Call Is Ambiguous Error While Using LINQ
Code Maze - C# "var" with a Reference Type is Always Nullable
Jeremy Clark - Getting git version information in your C# code
Steven Giesel - Safer Nullability in Modern C#
Matt Eland - C# 11.0 new features: newlines in string interpolation expressions
Ian Griffiths - Automatic Instrumentation of Containerized .NET Applications With OpenTelemetry
Rahul Rai - How Hangfire Helps Your .NET API Perform Out-of-Process Tasks with Resilience and Speed – Wrapt
Paul DeVito - Windows Forms Binding Improvements in .NET 7 for MVVM Support Edin Kapić
- C# 11–The scoped keyword
Bart Wullems

Aunque muchos de nosotros trabajamos a diario con C#, siempre hay algo nuevo por aprender o formas de utilizar algunas características que nunca se nos habían ocurrido. Siempre.
En un nuevo capítulo de la serie de C# bizarro, hoy os planteo un reto sobre este código:
var sum = (int a, int b) => a + b;
var sub = (int a, int b) => a - b;
var mul = (int a, int b) => a * b;
var result = sum - sub + mul;
Console.WriteLine("Resultado: " + result(3, 2));
¿Compila? Y si es así, ¿qué aparece por consola? ¡No sigáis leyendo! Echad un vistazo al código e intentad averiguarlo antes de ver la solución pulsando aquí :)
Pues sí, este código es totalmente válido y compilará sin problema. Y al ejecutarlo, por consola veremos lo siguiente.
Resultado: 6
En primer lugar el código compila correctamente porque las variables sum
, sub
y mult
, que hemos definido usando expresiones lambda de tipo Func<int, int, int>
, a la postre son simplemente delegados.
Además, los tres delegados tienen la firma idéntica (reciben dos valores int
y retornan un int
), podemos utilizar los operadores de combinación suma "+
" y resta "-
", lo que da lugar a un delegado de multidifusión (multicast delegate).
En nuestro código, creamos el nuevo delegado de multidifusión result
combinando sum
y mult
, que son los dos delegados que se suman. Por otra parte, la resta de sub
es simplemente una maniobra de distracción, pues se intentará eliminar de la combinación un delegado que no existía previamente, por lo que la operación será ignorada.
var result = sum - sub + mul;
Tras ejecutar esta línea, result
será un Func<int, int, int>
cuya invocación provocará que se ejecuten secuencialmente, y por orden de llegada, los delegados que han sido combinados.
Por tanto, cuando se evalúa la expresión result(3, 2)
, se ejecutará primero la función sum(3, 2)
y luego mul(3, 2)
, y será el resultado de esta última la que se retorne finalmente. De ahí obtenemos el 6
que va a la consola.
¿Qué, habías acertado?
Publicado en Variable not found.

Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Crear componentes de forma dinámica en Blazor
José María Aguilar - 20 desastres famosos relacionados con el software
José María Aguilar
.NET Core / .NET
- Upgrading your .NET projects with Visual Studio
Olia Gavrysh - How to Return a Default Value From a Dictionary in C#
Code Maze - What is .NET, and why should you choose it?
.NET Team - Thoughts on 'What is .NET, and why should you choose it?'
Andrew Lock - Exploring the New Features and Improvements in .NET 7
Vinoth Kumar Sundara Moorthy - How to Get Formatted JSON in .Net Using C#
Code Maze - Async EventHandlers – A Simple Safety Net to the Rescue
Nick Cosentino - Wolverine’s New HTTP Endpoint Model
Jeremy D. Miller - Creating a circuit breaker health check using Polly CircuitBreaker
Jürgen Gutsch - What's On Tap for .NET 8 (Preview 1 Coming this Month)
David Ramel - Digging Into Nullable Reference Types in C#
Shawn Wildermuth - Multipart Form-Data in HttpClient with ASP.NET Core
Code Maze - Prevent accidental disclosure of configuration secrets
Gérald Barré - Removing Manually Installed .NET SDKs from Linux
Bryan Hogan - Creating Visual Studio extensions using Roslyn analyzers
Thomas Ardal - A (performance) quirk with JsonSerializer
Steven Giesel - Getting Started with Generics in .NET
Assis Zang

Hace poco, un alumno de mi curso de Blazor en CampusMVP me preguntaba si, para seguir con las viejas costumbres, desde Blazor Server era posible escribir en la consola del navegador.
Aunque no tiene demasiado sentido hacerlo dado que disponemos de buenas herramientas de depuración, me pareció un ejemplo interesante para aplicar los mecanismos de interoperación de Blazor con JavaScript. Además, quizás interese a alguien más, así que vamos a ver por aquí cómo hacerlo.
Pero antes de meternos en faena, vale la pena decir que lo que veremos no es específico de Blazor Server, sino que también podremos usarlo en Blazor WebAssembly. Los mecanismos básicos de interoperación con JavaScript son idénticos, por lo que en este post veremos cómo implementar un código válido para ambos tipos de hosting.
Publicado por José M. Aguilar a las 8:05 a. m.
Etiquetas: blazor, blazorinterop, blazorserver, blazorwasm