【问题标题】:WebApi HttpGet route is not returning Content-Length response header for HttpResponseMessageWebApi HttpGet 路由未返回 HttpResponseMessage 的 Content-Length 响应标头
【发布时间】:2015-11-12 21:27:13
【问题描述】:

我有一个 WebApi 端点,它获取一个 mp4 的 FTP 文件并返回它。出于某种原因,Content-Length 响应标头未设置,我怀疑这导致我的 html5 视频无法正常工作,因为用户无法搜索。

HTML:

<video controls src="api/my-ftp-file.mp4"></video>

WebApi:

[Route("api/{fileName}")]
[HttpGet]

public HttpResponseMessage FtpFile(string fileName)
{
    var credentials = new NetworkCredential("...", "...");

    var fullFilePath = "ftp://my-ftp-server/" + fileName;

    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(fullFilePath);
    request.Method = WebRequestMethods.Ftp.DownloadFile;
    request.Credentials = credentials;
    var response = (FtpWebResponse)request.GetResponse();
    var stream = response.GetResponseStream();

    // get content length (since response.ContentLength from above is -1)
    FtpWebRequest request2 = (FtpWebRequest)WebRequest.Create(fullFilePath);
    request2.Method = WebRequestMethods.Ftp.GetFileSize;
    request2.Credentials = credentials;
    var response2 = (FtpWebResponse)request2.GetResponse();
    var contentLength = response2.ContentLength; // this DOES provide a value

    var ret = new HttpResponseMessage(HttpStatusCode.OK);
    ret.Content = new StreamContent(stream);
    ret.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("video/mp4");
    // I've also tried ret.Content.Headers.ContentLength = contentLength
    ret.Content.Headers.Add("Content-Length", contentLength.ToString());

    return ret;
}

我的 html5 视频标签播放视频,尽管如此,如果您拖动代码以寻找视频中的另一个点,则没有任何反应。我怀疑这是因为我的 Chrome 网络选项卡中的 Content-Length 丢失了:

为什么 Content-Length 不随请求一起发送?

【问题讨论】:

    标签: asp.net-web-api2 ftpwebrequest


    【解决方案1】:

    因为您以“分块”(Transfer-Encoding:分块)的形式发送响应。 见wikipedia: transfer encoding

    【讨论】:

    • 不应该分块吗?如果是这样,我该如何设置?我敢打赌,这就是我的视频播放器控件无法正常工作的原因。
    猜你喜欢
    • 2011-02-16
    • 2020-07-15
    • 1970-01-01
    • 2016-08-25
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    相关资源
    最近更新 更多