【问题标题】:How to create a new file on the server with blazor client-side application?如何使用 blazor 客户端应用程序在服务器上创建新文件?
【发布时间】:2023-03-19 21:14:01
【问题描述】:

我正在尝试通过单击客户端页面上的按钮在 Web 服务器上创建一个新文件。

浏览器控制台仅显示“WASM:已创建文件”。但不显示有关文件操作的任何错误或警告。

/wwwroot 路径下也没有新文件。

Blazor 服务器以管理员身份在 localhost (Win10) 上运行。

Index.razor 内容;

@page "/"

<h1>Demo1</h1>

<button type="submit" @onclick="CreateFile.Run">Create A New File</button>

@code 
{
    public class CreateFile
    {

        public static void Run()
        {
            System.IO.File.WriteAllText("test.txt", "hello world");
            System.IO.File.WriteAllText(@"C:\VS Code Projects\Demo1\Client\wwwroot\samplefile.txt", "content 123");
            Console.WriteLine("File created.");

        }
    }
}

【问题讨论】:

  • 你考虑过输出当前的工作文件夹吗?
  • @BugFinder 不,我没有。仅使用默认项目设置。

标签: c# asp.net-core client blazor system.io.file


【解决方案1】:

这是不可能的。您的代码在客户端而不是服务器上运行,并且您无权访问客户端上的文件系统。

如果您想要执行此类操作,您需要使用 Blazor 服务器应用程序而不是 Blazor WebAssembly 应用程序。

【讨论】:

  • 感谢您的回复。
【解决方案2】:

此消息:“WASM:文件已创建。”表示您正在使用 Blazor WebAssembly 应用程序,对吗?浏览器不应该允许您在客户端上创建文件。这只是您的代码生成的消息。

了解这一点:当您点击按钮时,会发生正常的回发,因为按钮的类型是“提交”。返回调用页面后,我猜是触发了点击事件(不确定但可能是这样),执行run方法中的代码,显示消息“WASM:文件已创建”。

了解这一点:您已创建托管的 Blazor WebAssembly 应用服务器。这是一个单页应用程序,它应该通过 Web Api 或 SignleR 与您的服务器通信。不得使用回传,并且需要了解 Blazor 的两种执行模式是如何工作的。

【讨论】:

  • 感谢您的帮助。是的,它是 Blazor WebAssembly 应用程序。我将尝试学习如何设置服务器和客户端之间的 Web API 通信。
  • 这:“浏览器不应该允许您在客户端上创建文件。”不完全正确。 WASM 将在客户端创建文件并“假装”它在该位置,但实际上它只是在浏览器内存中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-02
  • 2020-12-18
  • 2023-02-15
  • 2019-12-12
  • 1970-01-01
  • 2012-09-11
相关资源
最近更新 更多