1

I have this async handler

public sealed class ImageTransferHandler : IHttpAsyncHandler
{
    public bool IsReusable { get { return false; } }

    public ImageTransferHandler()
    {
    }
    public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
    {
        string url = context.Server.UrlDecode(context.Request.QueryString["url"]);

        ImageTransferOperation ito = new ImageTransferOperation(cb, context, extraData);
        ito.Start(url);
        return ito;
    }

    public void EndProcessRequest(IAsyncResult result)
    {
    }

    public void ProcessRequest(HttpContext context)
    {
        throw new InvalidOperationException();
    }

    private class ImageTransferOperation : IAsyncResult
    {
        private Object state;
        private bool isCompleted;
        private AsyncCallback cb;
        private HttpContext context;

        public WaitHandle AsyncWaitHandle
        {
            get { return null; }
        }

        public bool CompletedSynchronously
        {
            get { return false; }
        }

        public bool IsCompleted
        {
            get { return isCompleted; }
        }

        public Object AsyncState
        {
            get { return state; }
        }

        public ImageTransferOperation(AsyncCallback cb, HttpContext context, Object state)
        {
            this.cb = cb;
            this.context = context;
            this.state = state;
            this.isCompleted = false;
        }

        public void Start(string url)
        {
            ThreadPool.QueueUserWorkItem(new WaitCallback(StartTransfer), url);
        }

        private void StartTransfer(Object state)
        {
            string url = (string)state;

            System.Net.WebClient wc = new System.Net.WebClient();

            byte[] bytes = wc.DownloadData(url);

            context.Response.Headers.Add("Content-Type", "image/jpeg");
            context.Response.Headers.Add("Content-Length", bytes.Length.ToString());
            context.Response.BinaryWrite(bytes);

            isCompleted = true;
            cb(this);
        }
    }
}

Everything works except that the "Content-Type" header not sent. I tried to send it both with

context.Response.Headers.Add("Content-Type", "image/jpeg");

and

context.Response.Headers["Content-Type"] = "image/jpeg";

What do I do wrong?

1
  • Wonderful! Thanx. I didn't know that this header threated exceptionally. Pretty contr-intuitive. Commented Jun 6, 2011 at 11:12

1 Answer 1

1

Use Response.ContentType. Glad that worked for you :)

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.