Response からの入力をブラウザーに戻すために、モジュールに次のコードがあります。問題は、適切にレンダリングされていないサードパーティ アプリケーションの PNG ファイルがいくつかあることです。適切にレンダリングされる他の PNG および JPG ファイルがあります。問題のファイルの Content-Type が Text として送り返されているため、適切な出力タイプ コードが実行されません。誰もこれを見たことがありますか?これを解決する方法についてのアイデアはありますか?
byte[] responsearr = ReadFully(response.GetResponseStream());
System.Text.Encoding encoding = System.Text.Encoding.UTF8;
string responseStr = encoding.GetString(responsearr);
HttpContext.Current.Response.ContentType = response.ContentType;
if (response.ContentType.Contains("image") || response.ContentType.Contains("document"))
{
if (response.ContentType.Contains("image"))
Debug.WriteLine(encoding.GetString(responsearr));
HttpContext.Current.Response.OutputStream.Write(responsearr, 0, responsearr.Length);
}
else
{
HttpContext.Current.Response.Write(responseStr);
}
HttpContext.Current.Response.Flush();
HttpContext.Current.ApplicationInstance.CompleteRequest();
MIME タイプの割り当てについて Apache 管理者に確認できるまで、コードを次のように更新しました。
void RouteRequest(ProxyMappingElement mapping)
{
//does a whole bunch of stuff between here and there ....
// Important problem piece
byte[] responsearr = ReadFully(response.GetResponseStream());
System.Text.Encoding encoding = System.Text.Encoding.UTF8;
string responseStr = encoding.GetString(responsearr);
HttpContext.Current.Response.ContentType = GetContentType(response);
if (HttpContext.Current.Response.ContentType.Contains("image") || HttpContext.Current.Response.ContentType.Contains("document"))
{
HttpContext.Current.Response.OutputStream.Write(responsearr, 0, responsearr.Length);
}
else
{
HttpContext.Current.Response.Write(responseStr);
}
HttpContext.Current.Response.Flush();
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
private string GetContentType(HttpWebResponse response)
{
return HttpContext.Current.Request.Url.ToString().Substring(
HttpContext.Current.Request.Url.ToString().Length - 3, 3).ToLower().Equals("png")
? (HttpContext.Current.Response.ContentType = "image/png")
: (HttpContext.Current.Response.ContentType = response.ContentType);
}