在dotnet core 3.0 RC1中,是否可以在服务器上预渲染客户端Blazor应用程序?

时间:2019-10-05 08:33:09

标签: c# .net-core blazor

在较早的预览中,我已经读过几篇有关此操作的文章,但是它们都不适合RC1。

我想要实现的是URL中的第一个请求(无论是/还是/about等)都应具有服务器端应用程序呈现的页面内容并将完整的标记传送到浏览器。

完成第一个请求后,客户端Blazor Web Assembly应用程序应接管。

我现在所拥有的:

  • LCBlazor.Client-客户端Blazor应用
  • LCBlazor.Server-服务器端dotNet核心3应用程序
// MyApp.Server - Startup.cs
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().AddNewtonsoftJson();
    services.AddServerSideBlazor();

    services.AddResponseCompression(opts =>
    {
        opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(
            new[] { "application/octet-stream" });
    });
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseResponseCompression();

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseBlazorDebugging();
    }

    app.UseClientSideBlazorFiles<Client.Startup>();

    app.UseFileServer();

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapFallbackToPage("/_Host");
        //endpoints.MapFallbackToClientSideBlazor<App>("/index.html");
    });
}
@* LCBlazor.Server.Pages._Host.cshtml *@
@page "/"
@namespace LCBlazor.Server.Pages
@using LCBlazor.Client
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>LCBlazor Prerendered</title>
    <base href="/" />
    <link href="css/bootstrap/bootstrap.min.css" rel="stylesheet" />
    <link href="css/site.css" rel="stylesheet" />
</head>
<body>
    <app>@(await Html.RenderComponentAsync<App>(RenderMode.Server))</app>

    <script src="_framework/blazor.webassembly.js"></script>
</body>
</html>

所有其他设置均与默认的blazor模板相同(已修复RenderTree错误)。

当前行为是该应用程序正在加载,但是如果我在浏览器中禁用JS,则不会显示任何内容,这表明该应用程序仍在依赖客户端进行呈现。

0 个答案:

没有答案