Я читал несколько статей об этом в более ранних превью, но ни одна из них не работает для RC1.
Я пытаюсь добиться того, чтобы первый запрос к URL-адресу (независимо от того,/
или /about
и т. Д.) Должны отображать содержимое страницы серверным приложением и полную разметку, передаваемую в браузер.
Как только этот первый запрос будет выполнен, клиентское приложение Blazor Web Assembly должно вступить во владение.
Что у меня есть сейчас:
- LCBlazor.Client -клиентское приложение Blazor
- LCBlazor.Server - серверное приложение dotNet core 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 в своем браузере, я не получаю контент, который указывает, что приложение все еще полагается на стороне клиента для рендеринга.