将文件写入 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);
}
仅供参考。