ファイルを response.OutputStream に書き込むときに、HttpResult.WritePartialTo でエラーがスローされます。これは私が得ているエラーです。
ProtocolViolationException: ストリームに書き込まれるバイトが、指定された Content-Length バイト サイズを超えています。
ファイルを返すために使用しているサンプル コードを次に示します。
/// <summary>
/// The request to get the file for a given media item.
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public HttpResult Get(GetMediaItemFileRequest request)
{
var mediaItem = _mediaService.GetMediaItemById(request.MediaItemId);
if (mediaItem == null)
throw new HttpError(404, "The given mediaitem id could not be located.");
var file = new FileInfo(mediaItem.GetImagePath());
var result = new HttpResult(file, GetMimeType(file.FullName));
result.Headers["MediaItemLength"] = file.Length.ToString(); // this is so that clients don't have to make another request to get the total size (for progress bars)
result.Headers["MediaExtension"] = file.Extension;
return result;
}
このエラーが発生する理由はありますか? 私は特別なことをしているわけではありません。
アップデート
HttpResultExtensions.AddHttpRangeResponseHeaders がコンテンツの長さを (私の場合) 58 バイトに設定しているようです。これは正しくありません。クライアントに 58 バイト以上を送信しています。
public static void AddHttpRangeResponseHeaders(this IHttpResponse response, long rangeStart, long rangeEnd, long contentLength)
{
response.AddHeader("Content-Range", StringExtensions.Fmt("bytes {0}-{1}/{2}", new object[] { rangeStart, rangeEnd, contentLength }));
response.StatusCode = 0xce;
response.SetContentLength((rangeEnd - rangeStart) + 1L);
}
参考までに。