【发布时间】: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