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

C# 如何在.Net Core中创建文件并在此文件中插入字节?,c#,asp.net-core-webapi,C#,Asp.net Core Webapi,我的问题是创建此控制器时: [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.

我的问题是创建此控制器时:

[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的结果。

检查以下答案。您应该有一个正确的解决方案:

TL;DR:使用FileResult而不是IActionResult或设置内容处置标头

另一篇非常好的文章:

关于:System.Byte[]的说明

我想,既然您将内容类型设置为“text/plain”,那么在某个地方就存在.ToString()转换。看看这个问题的第一条线索

数组不重写此方法,因此对于数组,它返回类型名-这是默认实现


我不确定,你对结果“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");
}
我得到一个里面有“test”的文件

但是你最好使用

public FileResult CreateFile(string word)

当然,您可以使用UTF8代替ASCII

byte[] b = Encoding.UTF8.GetBytes(word);
好的,我抓到你了

这就是你想要的:

[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");
}

你能澄清一下你希望在文件中看到什么吗?不清楚您想要实现什么,或者为什么要在二进制和文本之间来回转换。应该检查“文本/普通”您所说的“二进制数据”到底是什么意思?所有通过电线的东西最终都是二进制的。您希望该
内存流中的确切字节数是多少?4个字节,每个字符一个?或者一些文本表示法(例如十六进制)?@JonSkeet我更新了我的票证。您的编辑对我来说没有意义-因为
word
的值是
“test”
。您所声称的结果是“test”的ASCII编码字节的base64编码版本。你在哪里看到这个结果?请编辑您的问题,使其更加清晰-虽然不清楚,但我们无法帮助您。我尝试了,但没有任何效果:/@user10863293检查我的答案->。当然,您可以使用UTF8而不是ASCIIES,但我不希望有一个包含测试的文件。当我执行Encoding.ASCII.GetBytes(word)的Console.WriteLine时,我的api dGVzdA==上有这个结果,我还希望在创建文件时在文件中有相同的结果。@user10863293。你想要什么来代替“测试”?如果要从word参数中获取文本,请删除word=“test”行@用户10863293:那么你需要澄清你想要什么。它真的,真的不清楚你想要什么,你是如何下载文件等。它只是我或这与“我想在文件中有二进制数据”无关,但它是有用的操作?问题的答案是missleading@bradbury9是的,你是对的。但这已经不重要了。已经清场了。