从另一个站点重定向流时出现502错误

时间:2017-11-22 10:07:21

标签: c# azure web asp.net-web-api2 azure-web-app-service

在我的WEB Api 2控制器中,我想从一个站点请求文件并从我的控制器返回此文件。这是代码

public HttpResponseMessage GetLecture()
{            
    HttpWebRequest request = WebRequest.CreateHttp("http://openmedia.yale.edu/cgi-bin/open_yale/media_downloader.cgi?file=/courses/spring11/phil181/mp3/phil181_01_011111.mp3");
    request.Referer = @"http://oyc.yale.edu/courses/";

    var receivedResponse = request.GetResponse();

    HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);                    
    response.Content = new StreamContent(receivedResponse.GetResponseStream());
    response.Content.Headers.ContentType = MediaTypeHeaderValue.Parse(receivedResponse.ContentType);
    response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
    response.Content.Headers.ContentDisposition.FileName = "phil181_01_011111.mp3";
    response.Content.Headers.ContentLength = receivedResponse.ContentLength;

    return response;
}

本地它工作正常,我可以下载文件但是当我将它部署到Azure时,我得到502错误。 Web服务器在充当网关或代理服务器时收到无效响应。

enter image description here

记录显示它在返回响应后失败,因此在方法执行期间没有异常。

这是〜50MB的文件。对于较小的文件代码工作正常。

如何使此代码在Azure上运行50 MB文件?

2 个答案:

答案 0 :(得分:4)

首先,我会为您的Azure Web App推荐configuring remote IIS administration,因为这样可以直接访问IIS日志和相关设置。我强烈认为该问题与IIS / ASP.NET限制有关。您已经指出该方法在几秒钟内完成执行,因此这可能不是超时问题。

您还提到该代码适用于较小的文件大小,但在大小增加时失败。这指向IIS bufferingLimit,因为您的网站设置为较小的值(或者可能是默认值~4 MB)。 Here是一个描述如何将此限制增加到所需值的链接。希望这对你有用。如果没有,我建议您深入了解您网站的IIS日志。

答案 1 :(得分:0)

错误消息说明了内容,您是否尝试过其他内容类型而不是您在此处receivedResponse.ContentType获得的内容类型?

您在之前的评论中说过,Google驱动器及以上网址会出现错误,因此它取决于返回的内容类型。

此外,您要返回而不是整个文件,同时将ContentDisposition指定为"attachment"

所以也许" audio / mpeg"将解决它或其他一些与流有效的内容类型。