{"id":28161,"date":"2019-10-23T01:31:00","date_gmt":"2019-10-22T23:31:00","guid":{"rendered":"https:\/\/blexin.com\/?p=28161"},"modified":"2021-01-13T09:40:23","modified_gmt":"2021-01-13T08:40:23","slug":"creare-una-single-page-application-in-c-con-blazor","status":"publish","type":"post","link":"https:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/","title":{"rendered":"Creare una Single Page Application in C# con Blazor"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"608\" data-attachment-id=\"28162\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/attachment\/d1dac374-cba0-439a-81e2-7b62dd9360ba\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/d1dac374-cba0-439a-81e2-7b62dd9360ba.png?fit=1024%2C608&amp;ssl=1\" data-orig-size=\"1024,608\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"d1dac374-cba0-439a-81e2-7b62dd9360ba\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/d1dac374-cba0-439a-81e2-7b62dd9360ba.png?fit=1024%2C608&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/d1dac374-cba0-439a-81e2-7b62dd9360ba.png?resize=1024%2C608&#038;ssl=1\" alt=\"\" class=\"wp-image-28162\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/d1dac374-cba0-439a-81e2-7b62dd9360ba.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/d1dac374-cba0-439a-81e2-7b62dd9360ba-980x582.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/d1dac374-cba0-439a-81e2-7b62dd9360ba-480x285.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Gli sviluppatori Microsoft hanno sempre avuto un brutto rapporto con JavaScript&nbsp;e Microsoft ha sempre tentato di aiutarli con i suoi framework. ASP.NET WebForm, SilverLight, Lightswitch, sono probabilmente i principali esempi in questo senso. Con ASP.NET MVC e .NET Core sembrava fosse finita, fino all\u2019annuncio di un nuovo framework per lo sviluppo full-stack in C#: Blazor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Passando da un applicazione desktop ad una applicazione web, il requisito pi\u00f9 importante \u00e8 restituire all\u2019utente un\u2019esperienza comparabile, senza refresh e con un minimo di supporto offline, almeno finch\u00e9 non ci sia la necessit\u00e0 di recuperare o salvare dati. Questi requisiti hanno portato alla separazione, nell\u2019application layer, tra API di backend e Single Page Application di front-end capace di girare nel browser, che significa scriverla in JavaScript.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019obiettivo di Blazor \u00e8 permettere di far girare codice .NET nel browser\u00a0senza l\u2019installazione di un plug-in, ma usando il supporto nativo dei principali browser sul mercato per WebAssembly (<a rel=\"noreferrer noopener\" href=\"https:\/\/webassembly.org\/\" target=\"_blank\">https:\/\/webassembly.org\/<\/a>). Attualmente, questa soluzione \u00e8 in pre-release e sar\u00e0 rilasciata a Maggio 2020, possiamo provarla scaricando .NET Core 3.1 da\u00a0<a rel=\"noreferrer noopener\" href=\"https:\/\/dotnet.microsoft.com\/download\/dotnet-core\/3.1\" target=\"_blank\">https:\/\/dotnet.microsoft.com\/download\/dotnet-core\/3.1<\/a>\u00a0e installando il template di progetto dalla riga di comando:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\ndotnet new -i Microsoft.AspNetCore.Blazor.Templates::3.1.0-preview1.19508.20\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Dopo l\u2019installazione del template, possiamo creare un progetto Blazor Webassembly con il comando:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>dotnet new blazorwasm<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Adesso, possiamo eseguire l\u2019applicazione con il classico comando:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>dotnet run<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aprendo il browser all\u2019indirizzo localhost:5000 possiamo vedere il risultato:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"927\" height=\"750\" data-attachment-id=\"28167\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/attachment\/image01-16\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-16.png?fit=927%2C750&amp;ssl=1\" data-orig-size=\"927,750\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image01-16\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-16.png?fit=927%2C750&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-16.png?resize=927%2C750&#038;ssl=1\" alt=\"\" class=\"wp-image-28167\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-16.png 927w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-16-480x388.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 927px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ma la cosa pi\u00f9 interessante \u00e8 quello che viene scaricato quando apriamo l\u2019app:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"932\" height=\"748\" data-attachment-id=\"28169\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/attachment\/image02-15\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image02-15.png?fit=932%2C748&amp;ssl=1\" data-orig-size=\"932,748\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image02-15\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image02-15.png?fit=932%2C748&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image02-15.png?resize=932%2C748&#038;ssl=1\" alt=\"\" class=\"wp-image-28169\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image02-15.png 932w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image02-15-480x385.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 932px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Come possiamo vedere, ci sono tre file che rendono possibile la magia: blazor.webassembly.js, mono.js and mono.wasm. I file mono.js e mono.wasm sono la versione WebAssembly del framework Mono, famoso per il porting delle specifiche .NET su sistemi operativi non-Windows prima dell\u2019avvento del framework .NET Core. Il file blazor.webassembly.js usa il runtime Mono per eseguire il codice .NET della nostra applicazione nel browser, codice che si trova nel file Blazorwasm.dll.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"359\" height=\"303\" data-attachment-id=\"28171\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/attachment\/image03-14\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image03-14.png?fit=359%2C303&amp;ssl=1\" data-orig-size=\"359,303\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image03-14\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image03-14.png?fit=359%2C303&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image03-14.png?resize=359%2C303&#038;ssl=1\" alt=\"\" class=\"wp-image-28171\" srcset=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image03-14.png?w=359&amp;ssl=1 359w, https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image03-14.png?resize=300%2C253&amp;ssl=1 300w\" sizes=\"auto, (max-width: 359px) 100vw, 359px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Tutto il codice viene eseguito nel browser: non abbiamo bisogno di un web server per eseguire la parte client della nostra applicazione. Possiamo ospitare il risultato della pubblicazione ovunque, anche su un Blob di Azure o una CDN. Se apriamo il codice del progetto, possiamo vedere che lo Startup.cs contiene solo una istruzione nel metodo Configure:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nusing Microsoft.AspNetCore.Components.Builder;\nusing Microsoft.Extensions.DependencyInjection;\n\u00a0\u00a0\nnamespace blazorwasm\n{\n\u00a0\u00a0\u00a0\u00a0public class Startup\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0public void ConfigureServices(IServiceCollection services) {}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0public void Configure(IComponentsApplicationBuilder app)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0app.AddComponent&lt;App&gt; (&quot;app&quot;);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">L\u2019interfaccia utente della nostra applicazione sar\u00e0 composta da un albero di&nbsp;<strong>componenti Razor<\/strong>, a partire dalla radice configurata con l\u2019extension method&nbsp;<strong>AddComponent<\/strong>. Un componente Razor \u00e8 una parte della nostra interfaccia grafica, che \u00e8 definita in un file .razor e che contiene HTML e altri componenti Razor. Se conoscete ASP.NET MVC, la parola Razor \u00e8 sicuramente familiare: possiamo definire l\u2019interfaccia con una versione customizzata del Razor Engine.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ad esempio, il component radice App.razor contiene la seguente struttura:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\n&lt;Router AppAssembly=&quot;@typeof(Program).Assembly&quot;&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;Found Context=&quot;routeData&quot;&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;RouteView RouteData=&quot;@routeData&quot; DefaultLayout=&quot;@typeof(MainLayout)&quot; \/&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/Found&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;NotFound&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;LayoutView Layout=&quot;@typeof(MainLayout)&quot;&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;p&gt;Sorry, there&#039;s nothing at this address. &lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/LayoutView&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/NotFound&gt;\n&lt;\/Router&gt;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Questo componente \u00e8 una composizione di altri componenti (Router, Found, NotFound, LayoutView) e di un paragrafo. Se avete familiarit\u00e0 con i framework di UI JavaScript come Angular, questa struttura \u00e8 veramente semplice da capire: il componente router ci permette di gestire le rotte nella Single Page Application e reagire se il component richiesto viene trovato oppure no.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando definiamo un Razor component, possiamo usare il suo nome come elemento XML, in questo caso &lt;app>&lt;\/app>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\n&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;meta charset=&quot;utf-8&quot; \/&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width&quot; \/&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;title &gt;blazorwasm &lt;\/title&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;base href=&quot;\/&quot; \/&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;link href=&quot;css\/bootstrap\/bootstrap.min.css&quot; rel=&quot;stylesheet&quot; \/&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;link href=&quot;css\/site.css&quot; rel=&quot;stylesheet&quot; \/&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;app &gt;Loading... &lt;\/app&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;script src=&quot;_framework\/blazor.webassembly.js&quot; &gt; &lt;\/script&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Quindi, l\u2019applicazione \u00e8 composta da classici elementi HTML 5, CSS, il component Razor radice e lo script blazor.webassembly.js. A partire dal component radice App, viene renderizzato l\u2019intero albero di componenti Razor.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"509\" height=\"882\" data-attachment-id=\"28175\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/attachment\/image04-14\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image04-14.png?fit=509%2C882&amp;ssl=1\" data-orig-size=\"509,882\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image04-14\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image04-14.png?fit=509%2C882&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image04-14.png?resize=509%2C882&#038;ssl=1\" alt=\"\" class=\"wp-image-28175\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image04-14.png 509w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image04-14-480x832.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 509px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Il component MainLayout, nella cartella Shared, mostrer\u00e0 lo scheletro della pagina, come il _Layout.cshtml o la MasterPage di ASP.NET:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\n@inherits LayoutComponentBase\n\u00a0\u00a0\n&lt;div class=&quot;sidebar&quot;&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;NavMenu \/&gt;\n&lt;\/div&gt;\n\u00a0\u00a0\n&lt;div class=&quot;main&quot;&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;div class=&quot;top-row px-4&quot;&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;a href=&quot;http:\/\/blazor.net&quot; target=&quot;_blank&quot; class=&quot;ml-md-auto&quot;&gt;About&lt;\/a&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0&lt;div class=&quot;content px-4&quot;&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@Body\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n&lt;\/div&gt;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Nel men\u00f9 laterale, il motore renderizza il component Razor &lt;NavMenu \/>, mentre nell\u2019area principale della nostra applicazione renderizza il @Body, che dipende dalla rotta corrente. Come fa il motore a sapere che MainLayout \u00e8 il componente da usare per il layout della nostra applicazione? Nel componente App \u00e8 specificato con la seguente riga:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\n&lt;RouteView RouteData=&quot;@routeData&quot; DefaultLayout=&quot;@typeof(MainLayout)&quot; \/ &gt;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Supponiamo di cliccare sulla voce di menu Counter. Il @Body diventer\u00e0 il componente Counter.razor, che non \u00e8 un componente qualsiasi, ma una pagina:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\n@page &quot;\/counter&quot;\n\u00a0\u00a0\n&lt;h1 &gt;Counter &lt;\/h1 &gt;\n\u00a0\u00a0\n&lt;p &gt;Current count: @currentCount &lt;\/p &gt;\n\u00a0\u00a0\n&lt;button class=&quot;btn btn-primary&quot; @onclick=&quot;IncrementCount&quot; &gt;Click me &lt;\/button &gt;\n\u00a0\u00a0\n@code {\n\u00a0\u00a0\u00a0\u00a0private int currentCount = 0;\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0private void IncrementCount()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0currentCount++;\n\u00a0\u00a0\u00a0\u00a0}\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Questa pagina contiene un semplice bottone che esegue codice C# quando viene cliccato. Il codice incrementa una variabile locale, ma la cosa interessante \u00e8 che viene eseguito nel browser e non \u00e8 JavaScript:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"843\" data-attachment-id=\"28177\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/attachment\/image05-14\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image05-14.png?fit=1073%2C883&amp;ssl=1\" data-orig-size=\"1073,883\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image05-14\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image05-14.png?fit=1024%2C843&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image05-14.png?resize=1024%2C843&#038;ssl=1\" alt=\"\" class=\"wp-image-28177\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image05-14-1024x843.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image05-14-980x806.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image05-14-480x395.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c8 un framework molto interessante, ma non \u00e8 ancora pronto. Molti partner Microsoft, come SyncFusion, Telerik e DevExpress, stanno lavorando su librerie di componenti Razor per supportare gli sviluppatori nella creazione di applicazioni. Questo perch\u00e9 oggi un altro problema per un\u2019applicazione reale \u00e8 l\u2019assenza di un ecosistema di librerie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quindi, cosa possiamo fare oggi? Sicuramente, cominciare a studiare questa tecnologia, ma anche usare una versione server-side di questo framework che Microsoft ha rilasciato con .NET Core 3.0 in RTM. Questa versione sposta il codice e l\u2019elaborazione della UI sul server e usa le WebSocket con SignalR per pushare gli aggiornamenti di interfaccia al browser.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"525\" height=\"310\" data-attachment-id=\"28180\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/attachment\/image06-11\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image06-11.png?fit=525%2C310&amp;ssl=1\" data-orig-size=\"525,310\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image06-11\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image06-11.png?fit=525%2C310&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image06-11.png?resize=525%2C310&#038;ssl=1\" alt=\"\" class=\"wp-image-28180\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image06-11.png 525w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image06-11-480x283.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 525px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Non abbiamo il supporto offline e non utilizziamo il supporto del browser per WebAssembly, ma in alcuni scenari questi non sono problemi, ma soluzioni. Possiamo far girare l\u2019applicazione anche su browser che non hanno il supporto per WebAssembly, la dimensione dell\u2019applicazione da scaricare \u00e8 molto piccola, possiamo recuperare direttamente i dati senza problemi di sicurezza perch\u00e9 siamo gi\u00e0 sul server.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Andremo pi\u00f9 a fondo con questa versione di Blazor nei prossimi articoli, ma possiamo gi\u00e0 dire una cosa: quando avremo entrambe le versioni di Blazor, sceglieremo una della due sulla base dei nostri requisiti.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Happy coding!<\/p>\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>Vediamo come possiamo realizzare una Single Page Application utilizzando C# invece di JavaScript<\/p>\n","protected":false},"author":196716248,"featured_media":28162,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"off","_et_pb_old_content":"","_et_gb_content_width":"","_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","inline_featured_image":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","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},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[688637374],"tags":[688637414,688637459,688637382],"class_list":["post-28161","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-asp-net-core","tag-blazor","tag-c"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Creare una Single Page Application in C# con Blazor - Blexin<\/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:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Creare una Single Page Application in C# con Blazor - Blexin\" \/>\n<meta property=\"og:description\" content=\"Vediamo come possiamo realizzare una Single Page Application utilizzando C# invece di JavaScript\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/\" \/>\n<meta property=\"og:site_name\" content=\"Blexin\" \/>\n<meta property=\"article:published_time\" content=\"2019-10-22T23:31:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-01-13T08:40:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i2.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/d1dac374-cba0-439a-81e2-7b62dd9360ba.png?fit=1024%2C608&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"608\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Michele Aponte\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Michele Aponte\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/creare-una-single-page-application-in-c-con-blazor\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/creare-una-single-page-application-in-c-con-blazor\\\/\"},\"author\":{\"name\":\"Michele Aponte\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/cdc5540c3b6edcacd8d760669e797005\"},\"headline\":\"Creare una Single Page Application in C# con Blazor\",\"datePublished\":\"2019-10-22T23:31:00+00:00\",\"dateModified\":\"2021-01-13T08:40:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/creare-una-single-page-application-in-c-con-blazor\\\/\"},\"wordCount\":906,\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/creare-una-single-page-application-in-c-con-blazor\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/d1dac374-cba0-439a-81e2-7b62dd9360ba.png?fit=1024%2C608&ssl=1\",\"keywords\":[\"Asp.net core\",\"Blazor\",\"C#\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/creare-una-single-page-application-in-c-con-blazor\\\/\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/creare-una-single-page-application-in-c-con-blazor\\\/\",\"name\":\"Creare una Single Page Application in C# con Blazor - Blexin\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/creare-una-single-page-application-in-c-con-blazor\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/creare-una-single-page-application-in-c-con-blazor\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/d1dac374-cba0-439a-81e2-7b62dd9360ba.png?fit=1024%2C608&ssl=1\",\"datePublished\":\"2019-10-22T23:31:00+00:00\",\"dateModified\":\"2021-01-13T08:40:23+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/cdc5540c3b6edcacd8d760669e797005\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/creare-una-single-page-application-in-c-con-blazor\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/creare-una-single-page-application-in-c-con-blazor\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/creare-una-single-page-application-in-c-con-blazor\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/d1dac374-cba0-439a-81e2-7b62dd9360ba.png?fit=1024%2C608&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/d1dac374-cba0-439a-81e2-7b62dd9360ba.png?fit=1024%2C608&ssl=1\",\"width\":1024,\"height\":608},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/creare-una-single-page-application-in-c-con-blazor\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blexin.com\\\/it\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Creare una Single Page Application in C# con Blazor\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/\",\"name\":\"Blexin\",\"description\":\"Con noi \u00e8 semplice\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blexin.com\\\/it\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/cdc5540c3b6edcacd8d760669e797005\",\"name\":\"Michele Aponte\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/32138aff568f2063b34d27a23cef27e09f3159bfcadea5ea05599c499cf4342f?s=96&d=identicon&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/32138aff568f2063b34d27a23cef27e09f3159bfcadea5ea05599c499cf4342f?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/32138aff568f2063b34d27a23cef27e09f3159bfcadea5ea05599c499cf4342f?s=96&d=identicon&r=g\",\"caption\":\"Michele Aponte\"},\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/author\\\/michele-aponteblexin-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Creare una Single Page Application in C# con Blazor - Blexin","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:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/","og_locale":"it_IT","og_type":"article","og_title":"Creare una Single Page Application in C# con Blazor - Blexin","og_description":"Vediamo come possiamo realizzare una Single Page Application utilizzando C# invece di JavaScript","og_url":"https:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/","og_site_name":"Blexin","article_published_time":"2019-10-22T23:31:00+00:00","article_modified_time":"2021-01-13T08:40:23+00:00","og_image":[{"width":1024,"height":608,"url":"https:\/\/i2.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/d1dac374-cba0-439a-81e2-7b62dd9360ba.png?fit=1024%2C608&ssl=1","type":"image\/png"}],"author":"Michele Aponte","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"Michele Aponte","Tempo di lettura stimato":"6 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/#article","isPartOf":{"@id":"https:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/"},"author":{"name":"Michele Aponte","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/cdc5540c3b6edcacd8d760669e797005"},"headline":"Creare una Single Page Application in C# con Blazor","datePublished":"2019-10-22T23:31:00+00:00","dateModified":"2021-01-13T08:40:23+00:00","mainEntityOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/"},"wordCount":906,"image":{"@id":"https:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/d1dac374-cba0-439a-81e2-7b62dd9360ba.png?fit=1024%2C608&ssl=1","keywords":["Asp.net core","Blazor","C#"],"articleSection":["Blog"],"inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/","url":"https:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/","name":"Creare una Single Page Application in C# con Blazor - Blexin","isPartOf":{"@id":"https:\/\/blexin.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/#primaryimage"},"image":{"@id":"https:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/d1dac374-cba0-439a-81e2-7b62dd9360ba.png?fit=1024%2C608&ssl=1","datePublished":"2019-10-22T23:31:00+00:00","dateModified":"2021-01-13T08:40:23+00:00","author":{"@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/cdc5540c3b6edcacd8d760669e797005"},"breadcrumb":{"@id":"https:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/#primaryimage","url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/d1dac374-cba0-439a-81e2-7b62dd9360ba.png?fit=1024%2C608&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/d1dac374-cba0-439a-81e2-7b62dd9360ba.png?fit=1024%2C608&ssl=1","width":1024,"height":608},{"@type":"BreadcrumbList","@id":"https:\/\/blexin.com\/it\/blog\/creare-una-single-page-application-in-c-con-blazor\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blexin.com\/it\/"},{"@type":"ListItem","position":2,"name":"Creare una Single Page Application in C# con Blazor"}]},{"@type":"WebSite","@id":"https:\/\/blexin.com\/it\/#website","url":"https:\/\/blexin.com\/it\/","name":"Blexin","description":"Con noi \u00e8 semplice","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blexin.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/cdc5540c3b6edcacd8d760669e797005","name":"Michele Aponte","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/secure.gravatar.com\/avatar\/32138aff568f2063b34d27a23cef27e09f3159bfcadea5ea05599c499cf4342f?s=96&d=identicon&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/32138aff568f2063b34d27a23cef27e09f3159bfcadea5ea05599c499cf4342f?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/32138aff568f2063b34d27a23cef27e09f3159bfcadea5ea05599c499cf4342f?s=96&d=identicon&r=g","caption":"Michele Aponte"},"url":"https:\/\/blexin.com\/it\/author\/michele-aponteblexin-com\/"}]}},"jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/pcyUBx-7kd","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/d1dac374-cba0-439a-81e2-7b62dd9360ba.png?fit=1024%2C608&ssl=1","_links":{"self":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28161","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/users\/196716248"}],"replies":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/comments?post=28161"}],"version-history":[{"count":6,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28161\/revisions"}],"predecessor-version":[{"id":28182,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28161\/revisions\/28182"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media\/28162"}],"wp:attachment":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media?parent=28161"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/categories?post=28161"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/tags?post=28161"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}