Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何返回带有自定义消息的文件_C#_Asp.net Mvc_Asp.net Web Api_Asp.net Mvc 5_Asp.net Web Api2 - Fatal编程技术网

C# 如何返回带有自定义消息的文件

C# 如何返回带有自定义消息的文件,c#,asp.net-mvc,asp.net-web-api,asp.net-mvc-5,asp.net-web-api2,C#,Asp.net Mvc,Asp.net Web Api,Asp.net Mvc 5,Asp.net Web Api2,我使用HttpResponseMessage将文件返回到前端: public HttpResponseMessage Post(string version, string environment, string filetype) { var path = @"C:\Temp\a.txt"; HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); var str

我使用HttpResponseMessage将文件返回到前端:

public HttpResponseMessage Post(string version, string environment,
string filetype)
{
    var path = @"C:\Temp\a.txt";
    HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
    var stream = new FileStream(path, FileMode.Open, FileAccess.Read);
    result.Content = new StreamContent(stream);
    result.Content.Headers.ContentType = 
    new MediaTypeHeaderValue("application/octet-stream");
    return result;
}
问题是,我怎样才能将消息与文件一起返回?我认为如果将消息添加到自定义头中,则会受到限制

编辑:


这里的用例是操作将创建大量文件,压缩文件并将压缩文件返回到前端,但问题是部分文件未成功创建,我需要将文件名返回到前端,我可以在数据库中创建日志,但问题是前端不知道日志id或其他一些信息来识别特定的日志。

简单的答案是:你不能

内容类型:应用程序/八位字节流
设置内容类型,因此浏览器将假定作为内容一部分的字节是二进制文件

这里的用例是什么?
也许您可以使用Multipart,就像用于电子邮件一样,但一般来说,只有单独的请求/端点才是典型的解决方案。您甚至可以将查询参数(如
?message
)附加到现有端点

是的,但使用json时,它不再是一个简单的文件下载,还需要对其进行编码和解码,然后作为从本地存储/a blob下载的文件提供。所有这些都应该是多条路线。当然,可以实现不同的操作,但存在很多下游问题,例如,自定义消息将不再由代理缓存,这对于文件下载是有意义的,等等。这里的用例是操作将创建大量文件,压缩文件并将压缩文件返回前端,但问题是有些文件没有成功创建,我需要将文件名返回前端,我可以在数据库中创建日志,但问题是前端不知道日志id或其他信息来识别特定日志。然后我会使用一些“准备”路径,这将启动压缩,并可能返回文件列表、成功文件或错误文件,然后可以使用重定向和/或返回一些临时文件id(您应该为它们使用UUID或其他,并在一段时间后真正删除它们)。然后,生成的文件id是第二个路由/调用,即下载zip的路由/调用。关于压缩失败的信息不是文件的一部分,而是请求/创建压缩失败的过程。是的,不同的请求是一种选择。我知道添加带有日志文件路径的自定义响应头是个好主意吗?然后我可以将错误记录到日志文件中吗?这个想法是,如果前端没有得到请求头,它就不会发送发送请求来获取错误。这并不是真的,因为整个web都不应该访问日志文件,因此您根本不需要将错误存储在日志文件中,而是可以直接将错误发送回前端,并在服务器上使用不同的请求将其忘掉。然后前端甚至可以以不同的方式处理:关键文件丢失-开始下载?再试一次?