【发布时间】:2018-08-24 07:18:57
【问题描述】:
我在 ASP.Net 中创建了一个通用处理程序 (.ashx) 以从数据库加载图像并将其发送到浏览器。
我正在使用颜色框将其显示在一个单独的页面中,该页面只有一个图像控件并通过 ImageUrl 属性调用此处理程序。
第一次,图像没有显示在颜色框中。对于后续请求,将显示图像。 我尝试调试发现,对于后续请求,浏览器没有使用往返,而是从缓存中显示。
如何让它第一次显示?
public class DocumentViewer : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string querystring = context.Request.QueryString.ToString();
try
{
if (querystring != null && querystring.Trim().Length == 0)
{
context.Response.ContentType = "text/plain";
context.Response.Write("Error");
context.Response.Write("No");
return;
}
string DocCode = querystring;
DocumentInfoBL bl = new DocumentInfoBL();
DataTable dt = bl.GetDocumentInfo(DocCode);
if (dt.Rows.Count == 0)
{
context.Response.ContentType = "text/plain";
context.Response.Write("Error");
context.Response.Write("No");
return;
}
context.Response.Clear();
context.Response.ClearContent();
context.Response.ClearHeaders();
context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.Cache.SetExpires(DateTime.MinValue);
// context.Response.ContentType = "application/octet-stream";
context.Response.ContentType = MimeMapping.GetMimeMapping(System.IO.Path.GetFileName(dt.Rows[0]["DocumentFileName"].ToString()));
context.Response.AddHeader("content-disposition", "inline; filename=" + System.IO.Path.GetFileName(dt.Rows[0]["DocumentFileName"].ToString()));
context.Response.BinaryWrite((Byte[])dt.Rows[0]["DocumentFile"]);
context.Response.Buffer = false;
context.Response.Flush();
}
catch (Exception ex)
{
context.Response.ContentType = "text/plain";
context.Response.Write("Error");
context.Response.Write("No");
return;
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
【问题讨论】: