Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.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# WebAPI-返回文件和附加数据_C#_Json_Asp.net Web Api - Fatal编程技术网

C# WebAPI-返回文件和附加数据

C# WebAPI-返回文件和附加数据,c#,json,asp.net-web-api,C#,Json,Asp.net Web Api,我需要WebAPI方法,它返回文件和一些附加数据。我试着去做: HttpResponseMessage result = Request.CreateResponse<OCRResult>(HttpStatusCode.OK, ocrResult); var stream = new FileStream(@"D:\\_forTest.jpg", FileMode.Open); result.Content = new StreamCo

我需要WebAPI方法,它返回文件和一些附加数据。我试着去做:

        HttpResponseMessage result = Request.CreateResponse<OCRResult>(HttpStatusCode.OK, ocrResult);
        var stream = new FileStream(@"D:\\_forTest.jpg", FileMode.Open);
        result.Content = new StreamContent(stream);
        result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
        result.Content.Headers.ContentDisposition.FileName = Path.GetFileName("_forTest.jpg");
        result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
        result.Content.Headers.ContentLength = stream.Length;
        return result;
httpresponsemessageresult=Request.CreateResponse(HttpStatusCode.OK,ocresult);
var stream=newfilestream(@“D:\\\ u forTest.jpg”,FileMode.Open);
结果.内容=新的流内容(流);
result.Content.Headers.ContentDisposition=新的ContentDispositionHeaderValue(“附件”);
result.Content.Headers.ContentDisposition.FileName=Path.GetFileName(“_forTest.jpg”);
result.Content.Headers.ContentType=新的MediaTypeHeaderValue(“应用程序/八位字节流”);
result.Content.Headers.ContentLength=stream.Length;
返回结果;

但我在返回的结果中只看到了文件,而没有看到额外的json数据(当然,内容类型不是json)。如何“组合”它?

如果您查看
请求的文档。CreateResponse
方法:

值:HTTP响应消息的内容

因此,基本上,您可以将
ocresult
作为消息的内容,然后立即覆盖它:

result.Content = new StreamContent(stream);

在任何情况下,您都不能在HTTP响应中同时发送文件和显示内容。这是因为两者实际上以相同的方式发送(并且内容类型告诉浏览器它是可显示的内容还是文件)。这就是为什么大多数网站会显示带有自动重定向的内容页,并显示消息“您的下载将在几秒钟后开始”。

如果您查看
请求的文档。CreateResponse
方法:

值:HTTP响应消息的内容

因此,基本上,您可以将
ocresult
作为消息的内容,然后立即覆盖它:

result.Content = new StreamContent(stream);
在任何情况下,您都不能在HTTP响应中同时发送文件和显示内容。这是因为两者实际上以相同的方式发送(并且内容类型告诉浏览器它是可显示的内容还是文件)。这就是为什么大多数网站会显示一个自动重定向的内容页面,并显示“您的下载将在几秒钟后开始”的消息