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