我在这里不知所措。尝试将 google 变量 webfont (open sans) 添加到我的网站。
<link>静态CSS 字体。为什么?(分号,没有“300..700”)在网络上使用
要嵌入字体,请将代码复制到 html 中
Run Code Online (Sandbox Code Playgroud)[x] <link> [ ] @import <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;500;600;700;800&display=swap" rel="stylesheet">用于指定族的 CSS 规则
Run Code Online (Sandbox Code Playgroud)font-family: 'Open Sans', sans-serif;
整个页面上都没有 woff2 的下载(仅来自 API)。D/L 按钮仅适用于 .ttf。具有讽刺意味的是,在有关自托管的文章woff2中,他们使用了作为示例,即使他们不提供它。此外,甚至该字体的官方 GITHUB页面也只提供 .ttf。为什么?
其他来源提供了各种格式的静态文件(但我在那里没有看到可变的文件),另一个线程中的 ppl 甚至发布了他们自己的工具,例如:
折腾了一整天,终于找到了这个。还提到了另一个(官方)工具,用于将 ttf 转换为 woff2,这对于可变字体来说似乎不容易实现。SRSLY?这是唯一的方法吗?为什么没有任何文档?(好吧,也许我应该从 API 中获取 woff2,但我注意到浏览器之间存在差异,我认为例如 Opera gets …
搜索主题:
在上面的文章中,如果看到设置超时的示例。而且文档还解释了客户端和服务器端,每个 ofc 都可能突然崩溃/关闭,或者网络可能被切断等。所以双方似乎都有超时来做不同的事情,比如“向下”(=试图重新连接),最后“关闭”。所以...
问题#1:如何分别为客户端和服务器设置所有(至少 4 个)超时(包括保持活动状态)?
SO帖子显示了JS的答案和program.cs中的答案,有什么区别?它实际上是服务器/客户端吗?客户端启动时可以用C#设置还是需要用JS设置?如果是这样,相关文档在哪里?
问题#2:如何知道服务器端超时?
我从默认模板 (.NET 6) 创建了一个全新的 Blazor 服务器项目,并添加了 SO 帖子中的代码以查看所有电路。当我在 LAN 中运行它并且客户端(其他 PC)打开 Clicker,然后将 PC 置于完全休眠状态时,我看到了该OnConnectionDownAsync事件,但即使在 2 分钟后,也没有OnCircuitClosedAsync(它实际上也有效。之后打开 PC 2mins 实际上会让浏览器重新连接并OnConnectionUpAsync自动启动,无需OnCircuitOpenedAsync)。为什么?超时时间真的很长吗?我在哪里可以读取默认超时的变量,在哪里设置它?服务器保留线路信息多长时间,以便客户端可以重新连接?这不是 5 秒(请参阅上面的链接)。
更新:另一项测试确认断开连接超时似乎正好是 3 分钟(180 秒)。现在我需要了解如何设置它。注意:似乎不是options.WebSockets.CloseTimeout。
也不是options.ClientTimeoutInterval。
该文档说了一些关于
Application_Start在你的Global.asax
我从未读过相关内容。那是什么?这实际上是针对 Blazor 还是其他一些 ASP.NET 项目类型。这是唯一(正确)的方法吗?[编辑:它适用于较旧的框架,而不是 ASP.NET Core 6+]
问题 #3:提到的 5 秒超时是多少?它的观察。服务器完全关闭之前不会超时。
问题 #4AddHubOptions :...和MapBlazorHub...options...之间有什么区别?
编辑:
感谢 canton7,我将研究可空引用类型,因为这是此处显示的 C# 8 功能。
编辑2:
TL;DR:消息“'_products' 此处不为空”。纯粹基于变量_products的定义。如果它被定义为可空引用类型,它会说“这里可能为空”,如果它被定义为非可空引用类型(=正常,基本定义,不带“?”),它会说,显示在下图。这两种情况都只是提示/警告,不会改变编译后的代码。
调用方法:
protected override async Task OnInitializedAsync() //ignore the Polymorphism
{
_products = await ProdService.GetProductListAsync();
Console.WriteLine("_products: " + _products + " | is null?: " + (_products == null));
//output: <<_products: is null? True>>
}
Run Code Online (Sandbox Code Playgroud)
图像:
调用方法:
public async Task<List<Product>> GetProductListAsync()
{
return null;
}
Run Code Online (Sandbox Code Playgroud)
图像: