如何在 .Net Core 中创建文件并在该文件中插入字节?

我的问题是当我创建这个控制器时:


[HttpPost("[Action]")]

public IActionResult CreateFile(string word){

    word = "test";


    byte[] b = Encoding.ASCII.GetBytes(word);


    var txtBuilder = new StringBuilder();

    txtBuilder.Append(b);

    var txtContent = txtBuilder.ToString();

    var txtStream = new MemoryStream(Encoding.UTF8.GetBytes(txtContent));


    return File(txtStream,"text/plain","license.dat");

}

当我大摇大摆地尝试这个请求时,它允许我下载一个文件。当我下载文件时,内容是:


系统.字节[]


但是当我大摇大摆地测试这个时:


[HttpPost("[Action]")]

public IActionResult CreateFile(string word){

    word = "test";


    byte[] b = Encoding.ASCII.GetBytes(word);


    return BadRequest(b);

}

b 的结果是:


dGVzdA==


我不想在创建的文件中看到test或System.Byte[]在创建的文件中看到 b 在创建的文件上的结果。


繁华开满天机
浏览 85回答 3
3回答

慕尼黑的夜晚无繁华

好的,我找到你了。这就是你想要的:[HttpGet("CreateFile")]public IActionResult CreateFile(string word){    word = "test";    byte[] b = Encoding.ASCII.GetBytes(word);    string base64 = System.Convert.ToBase64String(b);    b = Encoding.ASCII.GetBytes(base64);    var txtStream = new MemoryStream(b);    return File(txtStream, "text/plain", "license.dat");}

梦里花落0921

检查以下答案。您应该有一个正确的解决方案:Return CSV from .NET Core controllerTL;DR:使用 FileResult 而不是 IActionResult 或设置 Content-Disposition 标头。另一篇非常好的文章:如何从 Web API 返回文件关于说明:System.Byte[]我想,由于您已将内容类型设置为“文本/纯文本”,因此某处存在 .ToString() 转换。看看这个问题的第一个conneto。返回“System.Byte[]”而不是实际数据Array 不会覆盖此方法,因此对于数组,它返回类型名称——这是默认实现。

呼唤远方

我不确定,结果“dGVzdA==”是什么意思但这个简单的作品:[HttpGet("CreateFile")]public IActionResult CreateFile(string word){    word = "test";    byte[] b = Encoding.ASCII.GetBytes(word);    var txtStream = new MemoryStream(b);    return File(txtStream, "text/plain", "license.dat");}我得到一个里面有“测试”的文件。但是你应该更好地使用public FileResult CreateFile(string word)而且,当然,您可以使用 UTF8 而不是 ASCIIbyte[] b = Encoding.UTF8.GetBytes(word);
打开App,查看更多内容
随时随地看视频慕课网APP