asp.net OnAfterRenderAsync在本地工作,但不在服务器上工作

7xllpg7q  于 2023-08-08  发布在  .NET
关注(0)|答案(1)|浏览(146)

我用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";
    }
}

vltsax25

vltsax251#

这是一个云耀斑的错。
具体而言,启用“Auto Minify”选项导致了问题。当我禁用它的时候,一切都开始工作了。

相关问题