2016-11-11 14 views
0

は、だから私は、私は、クライアント上でそれを得るときの事は、それが異なるサイズと異なるバイト配列である。このバイト配列はC#のWeb APIメソッドと異なりますか?

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

のようなバイト配列を返すWeb APIを持って、私はGoogleで検索してhttp://www.codeproject.com/Questions/778483/How-to-Get-byte-array-properly-from-an-Web-Api-Metこのリンクが役に立ったと評価してい。

これがなぜ発生するのか分かりますか?また、サーバーからそのファイルの内容を戻す別の方法は何ですか?

+0

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 = versus118).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コンテンツネゴシエーションで変更してはならないストリームが返されます。

関連する問題