Blazor WebAssembly 3.2.0 рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 1 рдЕрдм рдЙрдкрд▓рдмреНрдз рд╣реИ

рдЖрдЬ рд╣рдордиреЗ Blazor WebAssembly рдХреЗ рд▓рд┐рдП рдХрдИ рдмреЗрд╣рддрд░реАрди рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдФрд░ рд╕рдВрд╡рд░реНрджреНрдзрди рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдЕрдкрдбреЗрдЯ рдЬрд╛рд░реА рдХрд┐рдпрд╛ред

рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдирдпрд╛ рдХреНрдпрд╛ рд╣реИ:

  • рд╕рдВрд╕реНрдХрд░рдг 3.2 рдкрд░ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЧрдпрд╛ред
  • рд╕рд░рд▓реАрдХреГрдд рдкреНрд░рдХреНрд╖реЗрдкрдг
  • рдЖрдХрд╛рд░ рд╕реБрдзрд╛рд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
  • .NET рд╕рд┐рдЧреНрдирд▓рдЖрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рдкреЛрд░реНрдЯ



рд╢реБрд░реВ


Blazor WebAssembly 3.2.0 рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 1 рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,  .NET рдХреЛрд░ 3.1 рдПрд╕рдбреАрдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ  рдФрд░ рдлрд┐рд░ рдирд┐рдореНрди рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:

dotnet new -i Microsoft.AspNetCore.Blazor.Templates::3.2.0-preview1.20073.1

рдмрд╕ рдЗрддрдирд╛ рд╣реА! рдЖрдк https://blazor.net рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ  ред

рдореМрдЬреВрджрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ


3.1.0 рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 4 рд╕реЗ 3.2.0 рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 1 рд╕реЗ рдореМрдЬреВрджрд╛ рдмреНрд▓реЗрдЬрд╝рд░ рд╡реЗрдмрдЕрд╡реЗрд╢рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

  • рд╕рднреА рд▓рд┐рдВрдХ Microsoft.AspNetCore.Blazor * рдкреИрдХреЗрдЬ рд╕реЗ 3.2.0-рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 1.20073.1 рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред
  •  Blazor WebAssembly рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ  Program.cs рдореЗрдВ, рдХреЗ BlazorWebAssemblyHost.CreateDefaultBuilder() рд╕рд╛рде  рдмрджрд▓реЗрдВ  WebAssemblyHostBuilder.CreateDefault()ред
  • рд╕реЗ Blazor WebAssembly рдЧреНрд░рд╛рд╣рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬрдбрд╝ рдШрдЯрдХ рдкрдВрдЬреАрдХрд░рдг рд▓реЗ рдЬрд╛рдПрдБ  Startup.Configure рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП  рджреНрд╡рд╛рд░рд╛ Program.cs  рдмреБрд▓рд╛  builder.RootComponents.Add<TComponent>( )ред
  • Blazor WebAssembly  Startup.ConfigureServices  Program.cs   builder.Services.
  •  Startup.cs  Blazor WebAssembly client project.
  • Blazor WebAssembly ASP.NET Core,  Server   app.UseClientSideBlazorFiles<Client.Startup>(...)  app.UseClientSideBlazorFiles<Client.Program>(...).

3.2


рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ, рд╣рдордиреЗ .NET рдХреЛрд░ 3.1 рд▓реЙрдиреНрдЧ рдЯрд░реНрдо рд╕рдкреЛрд░реНрдЯ (LTS) рдХреА рд╣рд╛рд▓рд┐рдпрд╛ рд░рд┐рд▓реАрдЬрд╝ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Blazor WebAssembly рдкреИрдХреЗрдЬ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ 3.2 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ред .NET рдХреЛрд░ 3.2 рдХреА рдХреЛрдИ рднреА рд░рд┐рд▓реАрдЬрд╝ рдирд╣реАрдВ рд╣реБрдИ рд╣реИ - рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг 3.2 рдХреЗрд╡рд▓ рдмреНрд▓реЗрдЬрд╝реЛрд░ рд╡реЗрдмрд╕реИрдо рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред Blazor WebAssembly рд╡рд░реНрддрдорд╛рди рдореЗрдВ .NET Core 3.1 рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди .NET Core 3.1 LTS рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, Blazor WebAssembly, рдЗрд╕ рд╡рд░реНрд╖ рдХреЗ рдордИ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╕реВрдЪрд┐рдд, рдХреЗ рдЖрд░рдВрднрд┐рдХ рд░рд┐рд▓реАрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рд╡рд░реНрддрдорд╛рди , рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХреЗ рд░реВрдк рдЬреЛ рд╣реИ "рд╡рд░реНрддрдорд╛рди рдпрд╛ LTS рдХреА рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рддреАрди рдорд╣реАрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рд░рдЦрд╛," рдиреЗрдЯ рдХреЛрд░ рд╕рдорд░реНрдерди рдиреАрддрд┐ ред рдордИ рдореЗрдВ рд░рд┐рд▓реАрдЬрд╝ 3.2 рдХреЗ рдмрд╛рдж Blazor WebAssembly рдХреА рдЕрдЧрд▓реА рдЖрдЧрд╛рдореА рд░рд┐рд▓реАрдЬрд╝ .NET 5 рдХреЗ рд╕рд╛рде рд╣реЛрдЧреАред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ .NET 5 рдХреА рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ Blazor WebAssembly рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ .NET 5 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╕рд░рд▓реАрдХреГрдд рдкреНрд░рдХреНрд╖реЗрдкрдг


рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ, рд╣рдордиреЗ рд▓реЙрдиреНрдЪ рдФрд░ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ API рдХреЛ Blazor WebAssembly рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдмреНрд▓реЗрдЬрд╝рд░ рд╡реЗрдмрдЕрд╡реЗрд╢рди рдХреЗ рд▓рд┐рдП рд▓реЙрдиреНрдЪ рдФрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдПрдкреАрдЖрдИ рдХреЛ ASP.NET рдХреЛрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкреИрдЯрд░реНрди рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕рднреА рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рдереАрдВред рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рдПрдкреАрдЖрдИ рднреА рдХреБрдЫ рдирдП рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

рдпрд╣рд╛рдБ рдирдпрд╛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЛрдб Program.cs рдореЗрдВ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ :

public class Program
{
    public static async Task Main(string[] args)
    {
        var builder = WebAssemblyHostBuilder.CreateDefault(args);
        builder.RootComponents.Add<App>("app");

        await builder.Build().RunAsync();
    }
}

Blazor WebAssembly рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрдм рдЖрд╡реЗрджрди MainрдХреЗ рд▓рд┐рдП рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рддрд░реАрдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрд╕реНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЙрд▓ рдХрд░реЗрдВ WebAssemblyHostBuilder.CreateDefault()ред рд░реВрдЯ рдШрдЯрдХреЛрдВ рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд▓рд┐рдВрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ; рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдХреА StartupрдЕрдм рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ WeatherService, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди (DI) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИ:

public class Program
{
    public static async Task Main(string[] args)
    {
        var builder = WebAssemblyHostBuilder.CreateDefault(args);
        builder.Services.AddSingleton<WeatherService>();
        builder.RootComponents.Add<App>("app");

        await builder.Build().RunAsync();
    }
}

рд╣реЛрд╕реНрдЯ рдмрдирдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдХрд┐рд╕реА рднреА рдШрдЯрдХ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд░реВрдЯ DI рд╕реЗ рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдЖрд░рдВрднреАрдХрд░рдг рддрд░реНрдХ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ:

public class Program
{
    public static async Task Main(string[] args)
    {
        var builder = WebAssemblyHostBuilder.CreateDefault(args);
        builder.Services.AddSingleton<WeatherService>();
        builder.RootComponents.Add<App>("app");

        var host = builder.Build();

        var weatherService = host.Services.GetRequiredService<WeatherService>();
        await weatherService.InitializeWeatherAsync();

        await host.RunAsync();
    }
}

рдореЗрдЬрдмрд╛рди рднреА рдЕрдм рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдХреЗрдВрджреНрд░реАрдп рд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд┐рд╕реА рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЖрдмрд╛рджреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдкреЙрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

public class Program
{
    public static async Task Main(string[] args)
    {
        var builder = WebAssemblyHostBuilder.CreateDefault(args);
        builder.Services.AddSingleton<WeatherService>();
        builder.RootComponents.Add<App>("app");

        var host = builder.Build();

        var weatherService = host.Services.GetRequiredService<WeatherService>();
        await weatherService.InitializeWeatherAsync(host.Configuration["WeatherServiceUrl"]);

        await host.RunAsync();
    }
}

рдЖрдХрд╛рд░ рд╕реБрдзрд╛рд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ


Blazor WebAssembly рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рдЕрдкреНрд░рдпреБрдХреНрдд рдХреЛрдб рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ .NET IL рд▓рд┐рдВрдХрд░ рдХреЛ рдЪрд▓рд╛рддрд╛ рд╣реИред рдкрд┐рдЫрд▓реЗ рд░рд┐рд▓реАрдЬ рдореЗрдВ, рдХреЗрд╡рд▓ рдореБрдЦреНрдп рдврд╛рдВрдЪреЗ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реБрдП, рдмреНрд▓реЗрдЬрд╝рд░ рдЕрд╕реЗрдВрдмрд▓рд┐рдпреЛрдВ рдХреЛ рднреА рдЫрдВрдЯрдиреА рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЖрдХрд╛рд░ рдореЗрдВ рдереЛрдбрд╝реА рдХрдореА рдЖрдИ рд╣реИ - рд▓рдЧрднрдЧ 100 рдХреЗрдмреАред рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рдпрджрд┐ рдЖрдкрдХреЛ рдХрднреА рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЕрдкрдиреА рдЦреБрдж <BlazorLinkOnBuild>false</BlazorLinkOnBuild> рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ ред

.NET рд╕рд┐рдЧреНрдирд▓рдЖрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рдкреЛрд░реНрдЯ


рдЕрдм рдЖрдк .NET рд╕рд┐рдЧреНрдирд▓рдЖрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдмреНрд▓реЗрдЬрд╝рд░ рд╡реЗрдмрдЕрд╡реЗрд╢рди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рд╕реЗ рд╕рд┐рдЧреНрдирд▓рдЖрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдкрдиреЗ Blazor WebAssembly рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рд┐рдЧреНрдирд▓рдЖрд░ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП:

  1. ASP.NET Core рдкрд░ рд╣реЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдмреНрд▓реЗрдЬрд╝рд░ WebAssembly рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВред

    dotnet new blazorwasm -ho -o BlazorSignalRApp
  2. рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ ASP.NET рдХреЛрд░ рд╕рд┐рдЧреНрдирд▓рдЖрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝реЗрдВ ред

    cd BlazorSignalRApp
    dotnet add Client package Microsoft.AspNetCore.SignalR.Client
  3. рд╕рд░реНрд╡рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ, рдирд┐рдореНрди рд╣рдм / ChatHub.cs рд╡рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВ ред

    using System.Threading.Tasks;
    using Microsoft.AspNetCore.SignalR;
    
    namespace BlazorSignalRApp.Server.Hubs
    {
        public class ChatHub : Hub
        {
            public async Task SendMessage(string user, string message)
            {
                await Clients.All.SendAsync("ReceiveMessage", user, message);
            }
        }
    }
    
  4. рд╕рд░реНрд╡рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ, рд╕рд┐рдЧреНрдирд▓рдЖрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд╡рд┐рдзрд┐ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ Startup.ConfigureServicesред

    services.AddSignalR();
    
  5. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рдЕрдВрдд рдмрд┐рдВрджреБ рдЬреЛрдбрд╝рдиреЗ ChatHubрдкрд░ Startup.Configureред

    .UseEndpoints(endpoints =>
    {
        endpoints.MapDefaultControllerRoute();
        endpoints.MapHub<ChatHub>("/chatHub");
        endpoints.MapFallbackToClientSideBlazor<Client.Program>("index.html");
    });
    
  6. рдирд┐рдореНрди рдорд╛рд░реНрдХрдЕрдк рдХреЗ рд╕рд╛рде рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреГрд╖реНрда / Index.razor рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ ред

    @using Microsoft.AspNetCore.SignalR.Client
    @page "/"
    @inject NavigationManager NavigationManager
    
    <div>
        <label for="userInput">User:</label>
        <input id="userInput" @bind="userInput" />
    </div>
    <div class="form-group">
        <label for="messageInput">Message:</label>
        <input id="messageInput" @bind="messageInput" />
    </div>
    <button @onclick="Send" disabled="@(!IsConnected)">Send Message</button>
    
    <hr />
    
    <ul id="messagesList">
        @foreach (var message in messages)
        {
            <li>@message</li>
        }
    </ul>
    
    @code {
        HubConnection hubConnection;
        List<string> messages = new List<string>();
        string userInput;
        string messageInput;
    
        protected override async Task OnInitializedAsync()
        {
            hubConnection = new HubConnectionBuilder()
                .WithUrl(NavigationManager.ToAbsoluteUri("/chatHub"))
                .Build();
    
            hubConnection.On<string, string>("ReceiveMessage", (user, message) =>
            {
                var encodedMsg = user + " says " + message;
                messages.Add(encodedMsg);
                StateHasChanged();
            });
    
            await hubConnection.StartAsync();
        }
    
        Task Send() => hubConnection.SendAsync("SendMessage", userInput, messageInput);
    
        public bool IsConnected => hubConnection.State == HubConnectionState.Connected;
    }
    
  7. рд╕рд░реНрд╡рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдФрд░ рдЪрд▓рд╛рдПрдВ

    cd Server
    dotnet run
    
  8. рд╕рд┐рдЧреНрдирд▓рдЖрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреИрдм рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЦреЛрд▓реЗрдВред

рдЬреНрдЮрд╛рдд рдкрд╣рд▓реБ


рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдЬреНрдЮрд╛рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдирд┐рдореНрди рд╣реИ рдЬреЛ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЕрджреНрдпрддрди рдореЗрдВ рдареАрдХ рдХреА рдЬрд╛рдПрдЧреАред

  • рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ ASP.NET Core рдкрд░ рд╣реЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдирдпрд╛ рдмреНрд▓реЗрдЬрд╝рд░ WebAssembly рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реБрд░реВ рдХрд░рдирд╛ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:

    CSC : warning CS8034: Unable to load Analyzer assembly C:\Users\user\.nuget\packages\microsoft.aspnetcore.components.analyzers\3.1.0\analyzers\dotnet\cs\Microsoft.AspNetCore.Components.Analyzers.dll : Assembly with same name is already loaded.
    
    • рд╕рдорд╛рдзрд╛рди: <DisableImplicitComponentsAnalyzers>true</DisableImplicitComponentsAnalyzers> MSBuild рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдЕрдирджреЗрдЦрд╛ рдпрд╛ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ  ред

рд╕рдореАрдХреНрд╖рд╛


рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдк Blazor WebAssembly рдХреЗ рдЗрд╕ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВрдЧреЗ! GitHub рдкрд░ рдореБрджреНрджреЛрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ ред

рдмреНрд▓реЗрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

Source: https://habr.com/ru/post/undefined/


All Articles