ASP.NET async handler content-type not sent
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;
开发者_如何学C 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?
Use Response.ContentType. Glad that worked for you :)
精彩评论