
user-agent
), información sobre la propia petición, como el host al que se dirige la petición (encabezado host
) o los idiomas que se aceptan para el contenido (accept-language
), e incluso información contextual como las cookies del usuario (cookie
) o información de autorización (authorization
), entre muchos otros.Hoy vamos a detenernos en una curiosidad histórica sobre el protocolo HTTP y uno de sus más célebres encabezados :)
Publicado por José M. Aguilar a las 8:05 a. m.
Etiquetas: aspnet, aspnetcore, curiosidades, http
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Crear proyectos usando versiones específicas del SDK de .NET Core
José María Aguilar - Implicit usings en C#10
José María Aguilar
.NET Core / .NET
- What's new for gRPC in .NET 6
James Newton-King - An optimization story:–27% runtime costs for 8 lines of code
Oren Eini - Fastest way to enumerate a List<T>
Gérald Barré - What’s New in C# 10: Simplify Nested Property Pattern Code
Jason Roberts - Cancellation Tokens with IAsyncEnumerable
Marinko Spasojevic - Profiling .NET code with MiniProfiler
Davide Bellone - Could .NET Source Generator Attacks Be A Danger To Your Code?
Steve Collins - Don't Do That, Do This: The .NET 6 Edition
Dave Brock - Creating an incremental generator: Creating a source generator
Andrew Lock - Traversing the C# syntax tree with F#
Jason Rametta - Digging into the .NET Dictionary implementation
Oren Eini - Syncfusion Controls Support .NET 6 and Visual Studio 2022
Mohamed Samsudeen - Custom JSON Serialisation with System.Text.Json Converters
Steve Gordon - Async Disposables The Easy Way
Phil Haack
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Directivas using globales en C# 10
José María Aguilar - Antipatrones de asincronía en C#
José María Aguilar
.NET Core / .NET
- Difference Between "throw" vs "throw ex" in C#
Marinko Spasojevic - What’s New in C# 10: Take Control of Interpolated String Handling
Jason Roberts - Not So Complex Numbers in C#
Mike James - Polymorphic Serialization with .NET System.Text.Json
Khalid Abuhakmeh - Fun with Flags, Enums and Bit Shifting
James Turner - What’s New in C# 10: Value Type Records
Jason Roberts - How Rider Hot Reload Works Under the Hood
Maarten Balliauw - .NET 6 Has Arrived: Here Are a Few of My Favorite Things
Dave Brock - The shortest quine in C# 9 and 10
Martin Zikmund - Windows Forms Lives On in .NET 6
David Ramel

Cuando aparece una nueva versión de C# o .NET, los titulares de las noticias, tweets y posts suelen girar en torno a las novedades más destacadas, aquellas que suponen cambios importantes respecto a versiones anteriores. Pero es habitual que, aparte de éstas, se añadan otras características más pequeñas que muchas veces pasan desapercibidas.
Esto es lo que ocurre con al atributo [CallerArgumentExpression]
, una joyita de C#10 que puede ayudarnos a hacer más descriptivos los mensajes de error y trazas que guardamos cuando aparece un error en nuestras aplicaciones.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- ¿Por qué llamamos "uppercase" y "lowercase" a mayúsculas y minúsculas?
José María Aguilar - ¿Se pueden asociar varias interfaces a la misma instancia en el contenedor de servicios de ASP.NET Core?
José María Aguilar
.NET Core / .NET
- DateOnly and TimeOnly support with System.Text.Json
Marco Minerva - Updating your project to use File Scoped Namespaces
Gérald Barré - Best keyboard shortcuts for .NET development
Piotr Bach - What’s New in C# 10: Simplify Argument Null Checking Code & Easier Lambda Expressions & New Possibilities for Validation and Logging Methods
Jason Roberts - Bending .NET - Common Flat Build Output
Niels Rasmussen - What’s New in C# 10: Write Less Code and Reduce Repeated Using Directives
Jason Roberts - [CallerArgumentExpression] and throw helpers: Exploring .NET Core 6
Andrew Lock - A .NET 5.0 Guide: From Idea To NuGet Package
Khalid Abuhakmeh - Modern C# Hello World
Patrick Smacchia - How to parse JSON Lines (JSONL) with C#
Davide Bellone - Named Pipes in .NET 6 with Tray Icon and Service
Erik Engberg - dotnet-script 1.3 is out with .NET 6.0 support
Filip Woj - When String.GetHashCode() in .NET C# Drives You Crazy
Ahmed Tarek - Everything That Every .NET Developer Needs to Know About Disposable Types: Using Tools to Find Issues
David McCarter - C# 10 Record Structs
Joe Mayo - Creating an Async Web API with ASP.NET Core
Pro Code Guide - Windows Authentication with HttpClient
Rick Strahl

Estamos muy acostumbrados a comenzar nuestros métodos realizando comprobaciones para evitar que pasen a nuestro código valores nulos que pudieran romper la aplicación.
Desde el principio de los tiempos, estas guardas han presentado el siguiente aspecto:
public class MyService
{
public void MyMethod(object first, object second)
{
if(first == null)
{
throw new ArgumentNullException("first");
}
if(second == null)
{
throw new ArgumentNullException("second");
}
// ...
}
}
¿Todo bien, verdad? El código es aparentemente correcto y fácil de comprender, pero... ¡demasiado extenso! Hemos consumido casi diez líneas de código sólo realizando comprobaciones de "fontanería", y ni siquiera hemos empezado a plantear la funcionalidad real del método.
Afortunadamente, con el tiempo C# ha ido evolucionando y mejorando sucesivamente este escenario tan frecuente.