.Net core 5 web api在content header中发送文件?



我正在迁移一个解决方案到最新的。net核心版本,但遇到了一些麻烦。我正试图找到一种方法,把一个zip文件,包括它的校验和哈希内的响应在。net core 5 web api的内容头。我这样做是为了检查客户端的Zip完整性

我在。net 4.7.2中有以下代码:

控制器:

httpResponseMessage = httpRequestMessage.CreateResponse(HttpStatusCode.OK);
httpResponseMessage.Content = new StreamContent(stream);
httpResponseMessage.Content.Headers.ContentDisposition =
new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
httpResponseMessage.Content.Headers.ContentDisposition.FileName = FileName;
httpResponseMessage.Content.Headers.ContentMD5 = mD5Bytes;
httpResponseMessage.Content.Headers.ContentType =
new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");

和客户端我挑选它像这样:

string destFolder = "C:\SourceDotNet\ReceiveLayouts\";
DirectoryInfo di = new DirectoryInfo(destFolder);
var resultFile = result.Content.ReadAsByteArrayAsync().Result;
var resultFileName = result.Content.Headers.ContentDisposition.FileName;
var resultHash = result.Content.Headers.ContentMD5;
var localHash = MD5.Create().ComputeHash(resultFile);

然后比较哈希值,如果相同则将文件写入磁盘。

我的问题是,这种方法的。net core 5变体是什么?没有结果。content . headers . contentdisposition没有结果。.Net core 5中的ContentMD5我感觉好像错过了什么。

编辑现在我知道下面的工作:

[HttpGet]
public IActionResult Get()
{
Byte[] bytes = System.IO.File.ReadAllBytes("C:\SourceDotNet\ResourceZipFolder\Resources.zip");
String file = Convert.ToBase64String(bytes);
var mD5Bytes = MD5.Create().ComputeHash(bytes);            
Response.ContentType = "asd";

return File(bytes, "application/octet-stream", "FileNameHere");

}

但我仍然不知道如何获得响应内的文件的哈希值,以比较完整性客户端..

首先,我了解到在使用https传输文件后检查校验和是多余的。

我仍然让它工作的方式是用下面的代码:

var bytes = System.IO.File.ReadAllBytes(tempFileFullPath);
var sha256 = SHA256.Create().ComputeHash(bytes);
Response.Headers.Add("FileHash", Convert.ToBase64String(sha256));

Directory.Delete(tempFolder.FullName, true);

return File(bytes, "application/octet-stream", fileName);

然后在客户端取出这些细节,比较校验和,瞧。

最新更新