我需要列出运行Blazor服务器的机器上的HTML文件。HTML页面由另一个应用程序生成。我能够检索所有HTML文件名,并在Blazor页面上列出它们(为找到的每个HTML文件创建一个<a href="file:///path_to_local_html_file">actual_file_name</a>
(。然而,当点击Blazor页面上HTML文件的链接时,什么也没发生。当我点击链接并选择Open link in new tab
时,它只加载一个地址为about:blank#blocked
的空页面。
我对Blazor没有太多经验,但我想这是一种保护,不访问Blazor页面范围之外的文件和目录。
我的Blazor服务器来自MSDN教程,正在运行:https://dotnet.microsoft.com/learn/aspnet/blazor-tutorial/run
我自己的代码如下(添加在Index.razor
中(:
<p>@((MarkupString)myString)</p>
@code {
private string myString = LoadFiles();
private static string LoadFiles()
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach (var file in System.IO.Directory.GetFiles(@"C:Temp"))
{
sb.AppendLine($"<a href="file:///{file.Replace(@"", "/")}" target="_blank">{file}</a><br/>");
}
foreach (var folder in System.IO.Directory.GetDirectories(@"C:Temp"))
{
sb.AppendLine($"<p>{folder}</p>");
}
return sb.ToString();
}
}
Blazor应用程序位于C:projectsBlazorApp
中,HTML文件位于同一台机器上的C:Temp
中。
如何在Blazor页面中创建指向这些HTML文件的工作链接
- 我无法控制创建HTML文件的应用程序,所以我只能检查是否有可用的文件。如果可用,如前所述,我需要将它们链接起来
提前感谢!
根据JeremyW,我将读取文件的内容,并将其显示为MarkupString
。因此,我准备了一个页面,它接收一个完整的文件路径作为参数(在URL中(,然后读取文件。
@inject NavigationManager navManager
@((MarkupString)htmlContent)
@code {
private string htmlContent = "";
protected override void OnInitialized()
{
var URL_PARAMS = GetURLParameters(navManager);
htmlContent = ReadHtmlFile(URL_PARAMS);
}
}
在HTML文件中,还有指向其他本地文件的附加链接。因此,在将实际内容传递给htmlContent
变量之前,我会更新这些链接。现在,每个链接都指向同一个blazor页面,再次提供该文件的文件路径作为参数。
http://localhost:44444/readFilePage?fullPath=C%3aFiles%3adata.html