2012-04-26 42 views
2

我有一个处理程序,它提供来自外部网站的图像。这个工作绝对很好。图片src不显示由处理程序提供的外部图像

但是,当我在图像src属性中使用处理程序它不起作用。

这是调用我作出了处理:

<img src="myhandler.ashx?image=http://nssdc.gsfc.nasa.gov/image/planetary/venus/gal_venus_37218.jpg"/> 

这是处理程序的代码:

using System; 
using System.Collections; 
using System.Data; 
using System.Linq; 
using System.Web; 
using System.Web.Services; 
using System.Web.Services.Protocols; 
using System.Xml.Linq; 
using System.Drawing; 
using System.Net; 
using System.IO; 
using System.Drawing.Imaging; 

namespace MumsChoice.Portal.UI.Handlers 
{ 
    /// <summary> 
    /// Summary description for $codebehindclassname$ 
    /// </summary> 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    public class ExternalImageHandler : IHttpHandler 
    { 

     public void ProcessRequest(HttpContext context) 
     { 
      Bitmap bitOutput = null; 
      Stream stream = null; 
      string contentType = string.Empty; 
      try 
      { 
       WebRequest req = WebRequest.Create(context.Request.QueryString["image"]); 
       WebResponse response = req.GetResponse(); 
       contentType = response.ContentType; 
       stream = response.GetResponseStream(); 
       bitOutput = new Bitmap(stream); 
      } 
      catch 
      { 
       bitOutput.Dispose(); 
      } 
      finally 
      { 
       stream.Close(); 
       stream.Dispose(); 
       stream = null; 
      } 

      ImageFormat format; 
      switch (contentType) 
      { 
       case "image/png": 
        format = ImageFormat.Png; 
        break; 
       case "image/gif": 
        format = ImageFormat.Gif; 
        break; 
       default: 
        format = ImageFormat.Jpeg; 
        break; 
      } 

      context.Response.ContentType = contentType; 
      bitOutput.Save(context.Response.OutputStream, format); 
      bitOutput.Dispose(); 
      return; 
     } 


     public bool IsReusable 
     { 
      get 
      { 
       return false; 
      } 
     } 
    } 
} 

任何想法,为什么?

+0

检查与Firebug的NET控制台,在开发工具铬合金网片或招潮蟹什么浏览器实际请求 – madaboutcode 2012-04-26 13:36:09

+0

是否webconfig知道新的处理程序服务器? http://msdn.microsoft.com/en-us/library/system.web.ihttphandler.processrequest(v=vs.80).aspx – rt2800 2012-04-26 13:38:02

+0

我认为你需要检查是否有抛出错误,调试到看看你是否得到了图像并发送它,那么如果所有的工作和问题都在img标签上,那么在你的情况下,我将使用URLEncode对http://进行编码。此外,我将remvoe WebService和WebServiceBinding这不属于处理程序。 – Aristos 2012-04-26 13:45:04

回答

-1

尝试加入底:

Response.Flush(); 
Response.End(); 
+0

,这没有什么区别 – user441365 2012-04-26 13:40:34