2016-11-11 18 views
0

所以我有一个网页API,返回一个字节数组这样与C#中的Web Api方法不同的字节数组?

public byte[] Validate() 
{ 
    byte[] buffer = licensePackage.ToByteArray(); 
    return buffer; 
} 

的事情是,当我得到它的客户是不同大小和不同的字节数组,我用Google搜索,发现这个链接有用http://www.codeproject.com/Questions/778483/How-to-Get-byte-array-properly-from-an-Web-Api-Met

但我能知道为什么会发生这种情况吗?另外,从服务器发回文件内容的替代方法是什么?

+0

Web Api返回的内容类型是什么? – jorgonor

+1

由于您没有发布检索数组的客户端代码,因此无法提供帮助。 Web API *不发送二进制数据,它使用Base64对它们进行编码。服务代码也不常见。 [这个问题](http://stackoverflow.com/questions/9541351/returning-binary-file-from-controller-in-asp-net-web-api)举例说明如何使用StreamResult来返回二进制数据并指定正确的内容类型。 –

+0

您可以使用[BinaryArrayContent](https://msdn.microsoft.com/en-us/library/system.net.http.bytearraycontent(v = vs.118).aspx)类直接返回二进制数据。我会重新考虑这一点 - 有专门的类来回应文件内容和BLOB。尽管应该将对象作为* Json *返回,否则客户端将无法在不解码字节的情况下使用该服务。 –

回答

1

有了这些给定的信息,我认为它必须与内容协商有关。我无法说出原因,但是我确信有一种不同的方法来为Web API提供文件。

var response = Request.CreateResponse(HttpStatusCode.OK); 
var stream = new FileStream(pathToFile, FileMode.Open, FileAccess.Read); 

response.Content = new StreamContent(stream); 
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 
return ResponseMessage(response); 

有了这个解决方案,您所服务的文件内容返回一个IHttpActionResult实例。并且,返回的响应为StreamContent,您将返回一个不能由Web Api Content Negotation修改的流。

相关问题