1

ファイルを 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);
}

参考までに。

4

0 に答える 0