我用Visual Studio中的“Blazor Server Application”模板创建了一个Web应用程序。
我发现我需要使用protected override async Task OnAfterRenderAsync(bool firstRender)
来加载数据(并在页面中添加html元素),而不需要延迟加载网站。
当我调试的时候,它工作得很好,但是当我把它放在Ubuntu服务器上,安装nginx并打开网站时,它显示了,但是数据没有加载。经过一些测试,我发现根本没有调用OnAfterRenderAsync()。
我尝试使用OnInitializedAsync。它正在正常调用,但我不认为我可以使用它,因为然后网站正在等待数据加载。
我使用Index.razor
文件+代码隐藏Index.razor.cs
文件。
我的Index.razor
有这个:
@foreach (var serverHtml in ServerHtmls)
{
@serverHtml
}
字符串
我的代码看起来像这样:https://pastebin.com/K5NQPx9P
PS
我创建了一个干净的Blazor服务器应用程序,并在Ubuntu上运行它。
在这个页面上,有一个“计数器”,当我在服务器上运行它时,它甚至不工作!所以当我在服务器上运行它时,实时功能有问题。你在干什么?
来自PasteBin的代码:
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (!firstRender) return;
Servers = new()
{
"1", "2"
};
foreach (var server in Servers)
{
await LoadAndAddServerAsync(server);
}
}
private async Task LoadAndAddServerAsync(string server)
{
var serverResponse = await LoadServerDataAsync(server);
List<string> premiumServers = new()
{
"1"
};
if (serverResponse.IsSuccess)
{
var motd = serverResponse.Motd;
var icon = serverResponse.Icon;
if (string.IsNullOrEmpty(icon))
{
icon = "/images/default-icon.webp";
}
bool premium = premiumServers.Contains(serverResponse.Server);
string premiumClass = string.Empty;
string premiumClass2 = string.Empty;
if (premium)
{
premiumClass = " golden";
premiumClass2 = " golden-text";
}
string serverHtml = $@"
<div class=""col-sm-6"">
<div class=""content"">
<div class=""card{premiumClass}"">
<div>
<h1 class=""card-title{premiumClass2}"">
{serverResponse.Server}
</h1>
</div>
<div>
<img class=""server-icon"" src=""{icon}"" alt=""..."" height=""80"" width=""80""/>
</div>
<div>
<p>
{motd}
</p>
</div>
</div>
</div>
</div>";
ServerHtmls.Add(new MarkupString(serverHtml));
StateHasChanged();
}
else
{
Console.WriteLine($"Error: {serverResponse.Server}:\n{serverResponse.Exception.Message}");
}
}
private async Task<ServerResponse> LoadServerDataAsync(string server)
{
try
{
var timeout = TimeSpan.FromSeconds(2);
var cancellationTokenSource = new CancellationTokenSource(timeout);
var cancellationToken = cancellationTokenSource.Token;
string response = await _client.GetStringAsync("https://api" + server, cancellationToken);
JObject json = JObject.Parse(response);
// load and return data
}
}
型
我的nginx文件看起来像这样:
server {
listen 443 ssl;
server_name *domain*;
ssl_certificate /etc/ssl/origin.pem;
ssl_certificate_key /etc/ssl/origin.key;
location / {
proxy_pass https://localhost:5001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}
型
1条答案
按热度按时间vltsax251#
这是一个云耀斑的错。
具体而言,启用“Auto Minify”选项导致了问题。当我禁用它的时候,一切都开始工作了。