{"id":1262,"date":"2026-03-12T08:57:55","date_gmt":"2026-03-12T11:57:55","guid":{"rendered":"https:\/\/maurobernal.com.ar\/blog\/?p=1262"},"modified":"2026-03-12T08:57:55","modified_gmt":"2026-03-12T11:57:55","slug":"dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling","status":"publish","type":"post","link":"https:\/\/maurobernal.com.ar\/blog\/dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling\/","title":{"rendered":"dotnet run script.cs y las nuevas herramientas de .NET 10: OpenAPI, HttpClient y m\u00e1s"},"content":{"rendered":"\n<p class=\"intro-destacado\">Uno de los cambios de .NET 10 que m\u00e1s me llam\u00f3 la atenci\u00f3n no es del compilador ni del runtime: es de las herramientas. <code>dotnet run script.cs<\/code> permite ejecutar un archivo C# sin crear un proyecto. Y el soporte OpenAPI nativo en Minimal APIs me hizo desinstalar Swashbuckle de varias soluciones. Repaso todo el tooling nuevo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">dotnet run script.cs: C# sin proyecto<\/h2>\n\n\n\n<p>Antes de .NET 10, ejecutar un archivo C# requer\u00eda crear un proyecto, un .csproj, restaurar paquetes&#8230; Para un script r\u00e1pido o una prueba de concepto, era excesivo. Ahora pod\u00e9s ejecutar un archivo directamente.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code\">\/\/ script.cs \u2014 archivo suelto, sin .csproj\nusing System.Net.Http.Json;\n\nvar http = new HttpClient();\nvar usuarios = await http.GetFromJsonAsync&lt;List&lt;Usuario&gt;&gt;(\n    \"https:\/\/jsonplaceholder.typicode.com\/users\"\n);\n\nforeach (var u in usuarios ?? [])\n    Console.WriteLine($\"{u.Id}: {u.Name} ({u.Email})\");\n\nrecord Usuario(int Id, string Name, string Email);<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code\"># Ejecutar directamente\ndotnet run script.cs\n\n# Con referencias a paquetes NuGet (directivas en el archivo)\n# #:package Newtonsoft.Json@13.0.3\n\n# Con argumentos\ndotnet run script.cs -- arg1 arg2\n\n# Ver el IL generado sin ejecutar\ndotnet run --no-build script.cs<\/code><\/pre>\n\n\n\n<p>Uso esto constantemente para probar APIs externas, procesar archivos CSV, o generar datos de prueba. Antes abr\u00eda LINQPad; ahora uso la terminal directamente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">OpenAPI built-in en Minimal APIs (.NET 9+)<\/h2>\n\n\n\n<p>Desde .NET 9, la documentaci\u00f3n OpenAPI est\u00e1 integrada en el framework. No hace falta Swashbuckle ni NSwag para tener un endpoint <code>\/openapi\/v1.json<\/code> funcional.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code\">\/\/ Program.cs \u2014 OpenAPI nativo en .NET 9\/10\nvar builder = WebApplication.CreateBuilder(args);\n\n\/\/ Solo agregar esto:\nbuilder.Services.AddOpenApi();\n\nvar app = builder.Build();\n\n\/\/ Endpoint para servir el documento OpenAPI\napp.MapOpenApi();  \/\/ \/openapi\/v1.json por defecto\n\n\/\/ Opcional: UI de Swagger (sigue siendo un paquete externo)\n\/\/ app.UseSwaggerUI(options => options.SwaggerEndpoint(\"\/openapi\/v1.json\", \"Mi API\"));\n\n\/\/ Minimal API con metadata para OpenAPI\napp.MapGet(\"\/api\/pedidos\/{id}\", async (int id, IRepositorio repo) =>\n{\n    var pedido = await repo.ObtenerAsync(id);\n    return pedido is null ? Results.NotFound() : Results.Ok(pedido);\n})\n.WithName(\"ObtenerPedido\")\n.WithSummary(\"Obtiene un pedido por ID\")\n.WithDescription(\"Retorna el pedido completo con sus l\u00edneas de detalle\")\n.WithTags(\"Pedidos\")\n.Produces&lt;Pedido&gt;(200)\n.Produces(404);\n\napp.Run();<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">HttpClient: mejoras en .NET 10<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code\">\/\/ .NET 10: HttpClient con Resilience nativo (Microsoft.Extensions.Http.Resilience)\nbuilder.Services.AddHttpClient&lt;IMiApiClient, MiApiClient&gt;(client =>\n{\n    client.BaseAddress = new Uri(\"https:\/\/api.externa.com\");\n    client.Timeout = TimeSpan.FromSeconds(30);\n})\n.AddStandardResilienceHandler();  \/\/ retry + circuit breaker + timeout autom\u00e1ticos\n\n\/\/ Configuraci\u00f3n personalizada del pipeline de resiliencia\nbuilder.Services.AddHttpClient&lt;IMiApiClient, MiApiClient&gt;()\n    .AddResilienceHandler(\"mi-pipeline\", builder =>\n    {\n        builder.AddRetry(new HttpRetryStrategyOptions\n        {\n            MaxRetryAttempts = 3,\n            Delay = TimeSpan.FromMilliseconds(500),\n            BackoffType = DelayBackoffType.Exponential\n        });\n        \n        builder.AddCircuitBreaker(new HttpCircuitBreakerStrategyOptions\n        {\n            FailureRatio = 0.5,\n            SamplingDuration = TimeSpan.FromSeconds(10),\n            MinimumThroughput = 5\n        });\n        \n        builder.AddTimeout(TimeSpan.FromSeconds(10));\n    });<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Mejoras en Minimal APIs<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code\">\/\/ .NET 9\/10: TypedResults para respuestas con tipos bien definidos\napp.MapPost(\"\/api\/usuarios\", async (CrearUsuarioRequest req, IServicio svc) =>\n{\n    if (string.IsNullOrEmpty(req.Email))\n        return TypedResults.ValidationProblem(new Dictionary&lt;string, string[]&gt;\n        {\n            [\"email\"] = [\"El email es requerido\"]\n        });\n\n    var usuario = await svc.CrearAsync(req);\n    return TypedResults.Created($\"\/api\/usuarios\/{usuario.Id}\", usuario);\n});\n\n\/\/ Route groups para organizar endpoints\nvar pedidosGroup = app.MapGroup(\"\/api\/pedidos\")\n    .WithTags(\"Pedidos\")\n    .RequireAuthorization();\n\npedidosGroup.MapGet(\"\/\", ObtenerTodos);\npedidosGroup.MapGet(\"\/{id}\", ObtenerPorId);\npedidosGroup.MapPost(\"\/\", Crear);\npedidosGroup.MapPut(\"\/{id}\", Actualizar);\npedidosGroup.MapDelete(\"\/{id}\", Eliminar);<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Blazor en .NET 10: render modes y streaming<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code\">\/\/ .NET 10: componentes Blazor con render modes expl\u00edcitos\n@page \"\/dashboard\"\n@rendermode InteractiveServer\n\n&lt;h1&gt;Dashboard&lt;\/h1&gt;\n\n@if (datos is null)\n{\n    &lt;p&gt;Cargando...&lt;\/p&gt;\n}\nelse\n{\n    @foreach (var item in datos)\n    {\n        &lt;div&gt;@item.Nombre: @item.Valor&lt;\/div&gt;\n    }\n}\n\n@code {\n    private List&lt;Dato&gt;? datos;\n\n    protected override async Task OnInitializedAsync()\n    {\n        \/\/ Streaming: el componente renderiza mientras carga\n        await foreach (var dato in servicio.GetStreamAsync())\n        {\n            datos ??= [];\n            datos.Add(dato);\n            StateHasChanged();  \/\/ actualiza el DOM incremental\n        }\n    }\n}<\/code><\/pre>\n\n<hr class=\"wp-block-separator\"\/>\n<p><em><a href=\"https:\/\/maurobernal.com.ar\/blog\/?p=1261\">\u2190 Rendimiento extremo en .NET 10: Stack allocation, Native AOT y el GC que trabaja menos<\/a> | <strong>Serie .NET 8 \u2192 .NET 10<\/strong> | Pr\u00f3ximo: <a href=\"https:\/\/maurobernal.com.ar\/blog\/?p=1263\">Gu\u00eda pr\u00e1ctica: c\u00f3mo migr\u00e9 mis proyectos de .NET 8 a .NET 10 sin romper producci\u00f3n \u2192<\/a><\/em><\/p>","protected":false},"excerpt":{"rendered":"<p>dotnet run script.cs sin proyecto, OpenAPI built-in en Minimal APIs (sin Swashbuckle), HttpClient con resiliencia nativa, TypedResults y mejoras de Blazor en .NET 10.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[202],"tags":[309,18,294,308,310,307,306],"class_list":["post-1262","post","type-post","status-publish","format-standard","hentry","category-dotnet","tag-blazor","tag-dotnet","tag-dotnet10","tag-httpclient","tag-minimal-api","tag-openapi","tag-tooling"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>dotnet run script.cs y las nuevas herramientas de .NET 10: OpenAPI, HttpClient y m\u00e1s &#183; devops Mauro Bernal<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/maurobernal.com.ar\/blog\/dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"dotnet run script.cs y las nuevas herramientas de .NET 10: OpenAPI, HttpClient y m\u00e1s &#183; devops Mauro Bernal\" \/>\n<meta property=\"og:description\" content=\"dotnet run script.cs sin proyecto, OpenAPI built-in en Minimal APIs (sin Swashbuckle), HttpClient con resiliencia nativa, TypedResults y mejoras de Blazor en .NET 10.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/maurobernal.com.ar\/blog\/dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling\/\" \/>\n<meta property=\"og:site_name\" content=\"devops Mauro Bernal\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-12T11:57:55+00:00\" \/>\n<meta name=\"author\" content=\"Mauro Bernal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@_maurobernal\" \/>\n<meta name=\"twitter:site\" content=\"@_maurobernal\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mauro Bernal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minuto\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling\\\/\"},\"author\":{\"name\":\"Mauro Bernal\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"headline\":\"dotnet run script.cs y las nuevas herramientas de .NET 10: OpenAPI, HttpClient y m\u00e1s\",\"datePublished\":\"2026-03-12T11:57:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling\\\/\"},\"wordCount\":214,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"keywords\":[\"blazor\",\"dotnet\",\"dotnet10\",\"httpClient\",\"minimal-api\",\"openapi\",\"tooling\"],\"articleSection\":[\"DotNet\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling\\\/\",\"url\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling\\\/\",\"name\":\"dotnet run script.cs y las nuevas herramientas de .NET 10: OpenAPI, HttpClient y m\u00e1s &#183; devops Mauro Bernal\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#website\"},\"datePublished\":\"2026-03-12T11:57:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"dotnet run script.cs y las nuevas herramientas de .NET 10: OpenAPI, HttpClient y m\u00e1s\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/\",\"name\":\"devops Mauro Bernal\",\"description\":\"Cuando tu trabajo es hacer que las cosas funcionen bien...\",\"publisher\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\",\"name\":\"Mauro Bernal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"width\":1740,\"height\":1740,\"caption\":\"Mauro Bernal\"},\"logo\":{\"@id\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\"},\"description\":\"Desarrollo de Sistemas en .Net, IT Callcenters, DBA de SQL Server, Mikrotik, Pentest y T\u00e9cnico consultor de Sistemas Bejerman\",\"sameAs\":[\"https:\\\/\\\/maurobernal.com.ar\",\"https:\\\/\\\/x.com\\\/_maurobernal\",\"https:\\\/\\\/youtube.com\\\/maurobernal\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"dotnet run script.cs y las nuevas herramientas de .NET 10: OpenAPI, HttpClient y m\u00e1s &#183; devops Mauro Bernal","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/maurobernal.com.ar\/blog\/dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling\/","og_locale":"es_ES","og_type":"article","og_title":"dotnet run script.cs y las nuevas herramientas de .NET 10: OpenAPI, HttpClient y m\u00e1s &#183; devops Mauro Bernal","og_description":"dotnet run script.cs sin proyecto, OpenAPI built-in en Minimal APIs (sin Swashbuckle), HttpClient con resiliencia nativa, TypedResults y mejoras de Blazor en .NET 10.","og_url":"https:\/\/maurobernal.com.ar\/blog\/dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling\/","og_site_name":"devops Mauro Bernal","article_published_time":"2026-03-12T11:57:55+00:00","author":"Mauro Bernal","twitter_card":"summary_large_image","twitter_creator":"@_maurobernal","twitter_site":"@_maurobernal","twitter_misc":{"Escrito por":"Mauro Bernal","Tiempo de lectura":"1 minuto"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/maurobernal.com.ar\/blog\/dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling\/#article","isPartOf":{"@id":"https:\/\/maurobernal.com.ar\/blog\/dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling\/"},"author":{"name":"Mauro Bernal","@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"headline":"dotnet run script.cs y las nuevas herramientas de .NET 10: OpenAPI, HttpClient y m\u00e1s","datePublished":"2026-03-12T11:57:55+00:00","mainEntityOfPage":{"@id":"https:\/\/maurobernal.com.ar\/blog\/dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling\/"},"wordCount":214,"commentCount":0,"publisher":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"keywords":["blazor","dotnet","dotnet10","httpClient","minimal-api","openapi","tooling"],"articleSection":["DotNet"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/maurobernal.com.ar\/blog\/dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/maurobernal.com.ar\/blog\/dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling\/","url":"https:\/\/maurobernal.com.ar\/blog\/dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling\/","name":"dotnet run script.cs y las nuevas herramientas de .NET 10: OpenAPI, HttpClient y m\u00e1s &#183; devops Mauro Bernal","isPartOf":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#website"},"datePublished":"2026-03-12T11:57:55+00:00","breadcrumb":{"@id":"https:\/\/maurobernal.com.ar\/blog\/dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/maurobernal.com.ar\/blog\/dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/maurobernal.com.ar\/blog\/dotnet10-dotnet-run-script-openapi-nativo-httpclient-tooling\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/maurobernal.com.ar\/blog\/"},{"@type":"ListItem","position":2,"name":"dotnet run script.cs y las nuevas herramientas de .NET 10: OpenAPI, HttpClient y m\u00e1s"}]},{"@type":"WebSite","@id":"https:\/\/maurobernal.com.ar\/blog\/#website","url":"https:\/\/maurobernal.com.ar\/blog\/","name":"devops Mauro Bernal","description":"Cuando tu trabajo es hacer que las cosas funcionen bien...","publisher":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/maurobernal.com.ar\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":["Person","Organization"],"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283","name":"Mauro Bernal","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","url":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","contentUrl":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","width":1740,"height":1740,"caption":"Mauro Bernal"},"logo":{"@id":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1"},"description":"Desarrollo de Sistemas en .Net, IT Callcenters, DBA de SQL Server, Mikrotik, Pentest y T\u00e9cnico consultor de Sistemas Bejerman","sameAs":["https:\/\/maurobernal.com.ar","https:\/\/x.com\/_maurobernal","https:\/\/youtube.com\/maurobernal"]}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1262","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/comments?post=1262"}],"version-history":[{"count":1,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1262\/revisions"}],"predecessor-version":[{"id":1271,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1262\/revisions\/1271"}],"wp:attachment":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/media?parent=1262"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/categories?post=1262"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/tags?post=1262"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}