使用 Blazor dotnet core 3.1 并收到此错误:
The list of component records is not valid
Run Code Online (Sandbox Code Playgroud)
发现关于此的错误报告已于 2019 年 12 月关闭:https :
//github.com/dotnet/aspnetcore/issues/14966
看不到此错误的任何原因,并希望有一种解决方法(不能在每个页面调用时都出现此错误,这种情况很少发生......)。
有没有人有可能导致这种情况的想法/提示?
谢谢!
在使用 Blazor 客户端将应用程序从 .NET Core 3.0 升级到 .NET Core 3.1 时,我遇到了同样的问题。我发现的第一个“修复”是在客户端(Web 浏览器)上进行强制刷新。也就是说,我按Ctrl+F5刷新。
我假设客户端上缓存了一些 API 调用,并且由于某些版本/格式从 3.0 更改为 3.1,旧的缓存数据不再有效,从而导致错误。
我将联系在 Blazor 工作的人员以尝试获取更多信息(我在 Microsoft 与他们一起工作)。
2020 年 6 月 1 日更新
我再次在 Azure 应用服务上运行我的应用程序。这次甚至Ctrl+ 都F5没有用。但是我找到了/sf/answers/4154944951/,并在那里应用了修复程序,这似乎解决了我的问题。
我对代码进行了轻微更改,因为在我的情况下,我仅在暂存/生产中而不是在开发中使用 Azure SignalR 服务。所以我在我的应用程序的 Startup.csConfigureServices方法中有这个代码:
if (!HostingEnvironment.IsDevelopment())
{
services.AddSignalR().AddAzureSignalR(options =>
{
options.ServerStickyMode = Microsoft.Azure.SignalR.ServerStickyMode.Required;
});
}
Run Code Online (Sandbox Code Playgroud)
小智 5
就我而言,它是我用作级联值的类,但它没有不带参数的构造函数
public class User
{
public User(ClaimsPrincipal principal)
{
....
}
....
}
public class User
{
//this fix
public User(){}
public User(ClaimsPrincipal principal)
{
....
}
....
}
[CascadingParameter]
private User User { get; set; }
Run Code Online (Sandbox Code Playgroud)
此问题可能是由浏览器的自动缓存控制造成的。
假设您有两个包含 Blazor 组件的 MVC 视图:页面 A.cshtml 和 B.cshtml。
请求页面 A 时,您会收到一个 html 响应,其中呈现了 Blazor 组件并建立了连接。然后,您导航到页面 B。如果您返回页面 A(例如按后退按钮),您的浏览器将使用之前缓存的响应来获取页面 A。
这应该会中断客户端和服务器之间的连接,因为组件描述符可能会更改。(有时似乎是随机的)。
要解决此问题,请在 _Host.cshtml 上添加以下内容禁用此缓存行为:
@{
Context.Response.Headers["Cache-Control"] = "no-store";
}
Run Code Online (Sandbox Code Playgroud)
这将阻止浏览器进行缓存,并使其请求具有正确组件描述符的新页面。
参考文献: https://github.com/dotnet/aspnetcore/issues/26174#issuecomment-705472525 https://github.com/dotnet/aspnetcore/issues/18143#issuecomment-585961784
| 归档时间: |
|
| 查看次数: |
2101 次 |
| 最近记录: |