【问题标题】:asp.net generic handler not sending images for the first timeasp.net 通用处理程序第一次不发送图像
【发布时间】: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;
            }
        }
    }

【问题讨论】:

    标签: asp.net generic-handler


    【解决方案1】:

    有效的代码。它是字符集或缓冲区。

     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 = 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.Buffer = true;
                    context.Response.Charset = "";
    
    
                    context.Response.BinaryWrite((Byte[])dt.Rows[0]["DocumentFile"]);
    
    
                    context.Response.Flush();
    
                }
                catch (Exception ex)
                {
    //Manage here
                    context.Response.ContentType = "text/plain";
                    context.Response.Write("Error");
                    context.Response.Write("No");
                    return;
                }
                context.Response.End();
            }
    

    【讨论】:

      猜你喜欢
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-06
      • 1970-01-01
      • 2015-05-16
      • 2012-12-09
      • 2013-06-12
      相关资源
      最近更新 更多