我的问题是当我创建这个控制器时:
[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");
}
当我在 swagger 上尝试此请求时,它允许我下载一个文件。当我下载文件时,内容是:
System.Byte[]
但是当我大摇大摆地测试这个时:
[HttpPost("[Action]")]
public IActionResult CreateFile(string word){
word = "test";
byte[] b = Encoding.ASCII.GetBytes(word);
return BadRequest(b);
}
b 的结果是:
dGVzdA==
我不想在创建的文件中看到test
或System.Byte[]
我想在创建的文件上看到 b 的结果。
好的,我有你。
这是你想要的:
[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");
}
检查以下答案。你应该有一个正确的解决方案:从 .NET Core 控制器返回 CSV
TL;DR:使用 FileResult 而不是 IActionResult 或设置 Content-Disposition 标头。
另一篇非常好的文章: 如何从Web API返回文件
解释: 系统字节[]
我想,既然您已将内容类型设置为"文本/纯文本",就有.ToString(( 转换某处。看看这个问题的第一个联系。返回"System.Byte[]"而不是实际数据
数组不会覆盖此方法,因此对于数组,它返回类型名称 - 这是默认实现。
我不确定,结果"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而不是ASCII
。byte[] b = Encoding.UTF8.GetBytes(word);