IHttpHandler在IE上的Https

时间:2016-12-19 17:25:03

标签: c# asp.net internet-explorer https ihttphandler

我正在寻找你的专业知识/帮助弄清楚为什么我的http处理程序完全通过http工作,而不是通过https(只有IE问题,其他浏览器无论如何都能正常工作)。我使用处理程序显示图像,当在IE上使用https时,它会显示一些图像而无法显示其他图像。

再次,问题只发生在https和IE上,其他浏览器的所有其他突变都可以正常工作。下面是我的代码:

public void ProcessRequest(HttpContext context)
    {
        Stream iStream = null;
        try
        {
            if (!context.Response.IsClientConnected || HttpContext.Current == null || HttpContext.Current.Session["GoodUser"] == null)
                return;

            var url = context.Request.QueryString[@"ID"];
            if (string.IsNullOrWhiteSpace(url))
                return;
            var fileUrl = EncryptionManager.DecryptUrl(url);
            if (!File.Exists(fileUrl))
                return;

            var buffer = new byte[4096];

            // Open the file.
            iStream = new FileStream(fileUrl, FileMode.Open, FileAccess.Read, FileShare.Read);

            // Total bytes to read:
            var dataToRead = iStream.Length;

            context.Response.AddHeader(@"Accept-Ranges", @"bytes");
            context.Response.AddHeader(@"Content-Length", dataToRead.ToString());
            context.Response.StatusCode= (int)HttpStatusCode.OK;

            var file = new FileInfo(fileUrl);
            context.Response.ContentType = MimeTypeMap.GetMimeType(file.Extension);
            context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
            context.Response.Cache.SetNoStore();
            context.Response.Cache.SetExpires(DateTime.MinValue);

            if (!string.IsNullOrEmpty(context.Request.Headers[@"Range"]))
            {
                var range = context.Request.Headers[@"Range"].Split('=', '-');
                var startbyte = int.Parse(range[1]);
                iStream.Seek(startbyte, SeekOrigin.Begin);
                context.Response.StatusCode = 206;
                context.Response.AddHeader(@"Content-Range", $@" bytes {startbyte}-{dataToRead - 1}/{dataToRead}");
            }

            while (dataToRead > 0)
            {
                iStream.Read(buffer, 0, buffer.Length);
                if (context.Response.IsClientConnected)
                {
                    context.Response.OutputStream.Write(buffer, 0, buffer.Length);
                    context.Response.Flush();
                    buffer = new byte[buffer.Length];
                    dataToRead = dataToRead - buffer.Length;
                }
                else
                {
                    dataToRead = -1;
                }
            }
        }
        catch (Exception exception)
        {

        }
        finally
        {
            iStream?.Close();
            context.ApplicationInstance.CompleteRequest();
        }
    }

0 个答案:

没有答案