Blazor 必须读取XML文件,如何防止使用OnInitializedAsync对其进行两次解析?

Blazor 必须读取XML文件,如何防止使用OnInitializedAsync对其进行两次解析?,blazor,blazor-server-side,Blazor,Blazor Server Side,我正在将我的网站从PHP转换为C Blazor,我得到了一个特殊的用例:每次用户访问页面时,我的PHP脚本都会加载一个XML文件,将数据组织成HTML,并提供给用户 将其转换为Blazor时,我发现OnInitializedAsync或OnInitialized被调用了两次。我的问题是解析XML文件可能相当长。为了解决这个问题,我尝试创建一个单例服务,但是当文件更改时,用户在服务器重新加载之前不会看到新版本 我的问题有两个: 我阅读了文档,但作为Blazor的新手,我很难理解为什么会两次调用On

我正在将我的网站从PHP转换为C Blazor,我得到了一个特殊的用例:每次用户访问页面时,我的PHP脚本都会加载一个XML文件,将数据组织成HTML,并提供给用户

将其转换为Blazor时,我发现OnInitializedAsync或OnInitialized被调用了两次。我的问题是解析XML文件可能相当长。为了解决这个问题,我尝试创建一个单例服务,但是当文件更改时,用户在服务器重新加载之前不会看到新版本

我的问题有两个:

我阅读了文档,但作为Blazor的新手,我很难理解为什么会两次调用OnInitializedAsync。你有一个简单的方法向我解释吗? 考虑到我无法改变需要加载XML文件的事实,您有什么最好的建议来防止它被读取两次?
谢谢大家!

您正面临此问题,因为您的应用程序是预渲染的,这就是为什么会两次调用OnInitializedAsync方法的原因。特别是由于_Host.cshtml文件中的代码:

<app>
    <component type="typeof(App)" render-mode="ServerPrerendered" />
</app>
设置如下:

<app>
        <component type="typeof(App)" render-mode="Server" />
</app>
但是,如果这不是问题,您可以在OnAfterRenderAsync方法中执行代码,当该方法的firstRender参数仅在第一次执行该方法时为true,并且事务将不再被处理两次


希望这有助于…

文件更改是什么意思?无论你在那里做什么,服务都应该是一样的。这有助于明确这些要求。通过创建时加载文件的单例服务,文件将保留在内存中。因此,如果XML文件发生更改,用户将无法看到更改,因为服务不会重新加载该文件。在PHP中,每次用户请求页面BB时都会加载该文件,但与BlazorTank you相比只加载一次!我将尝试这两种解决方案。你知道为什么需要这两个渲染吗?预渲染的目的是什么?