/
githubmirror
/
aspnetcore
Обзор
Документация
Войти
/
githubmirror
/
aspnetcore
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Components/test/testassets/Components.TestServer/LockedNavigationStartup.cs
67 строк
2 KB
Javier Calvarro Nelson
[Blazor] Enable websocket compression for Blazor Server and Interactive Server components in Blazor web (#53389)
05 фев 2024, 18:21
Не верифицирован
05 фев 2024, 18:21
f5853af
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Globalization; using System.Net.WebSockets; using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Http.Features; namespace TestServer; public class LockedNavigationStartup { // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddServerSideBlazor(); services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { var enUs = new CultureInfo("en-US"); CultureInfo.DefaultThreadCurrentCulture = enUs; CultureInfo.DefaultThreadCurrentUICulture = enUs; if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.Map("/locked-navigation", app => { app.UseStaticFiles(); app.UseAuthentication(); app.UseRouting(); app.UseWebSockets(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); endpoints.MapFallbackToPage("/LockedNavigationHost"); endpoints.MapBlazorHub().AddEndpointFilter(async (context, next) => { if (context.HttpContext.WebSockets.IsWebSocketRequest) { var currentFeature = context.HttpContext.Features.Get<IHttpWebSocketFeature>(); context.HttpContext.Features.Set<IHttpWebSocketFeature>(new ServerComponentsSocketFeature(currentFeature!)); } return await next(context); }); }); }); } private sealed class ServerComponentsSocketFeature(IHttpWebSocketFeature originalFeature) : IHttpWebSocketFeature { public bool IsWebSocketRequest => originalFeature.IsWebSocketRequest; public Task<WebSocket> AcceptAsync(WebSocketAcceptContext context) { context.DangerousEnableCompression = true; return originalFeature.AcceptAsync(context); } } }