2013-01-24 108 views
0

我想传递一些参数到通用处理程序和获取和响应图像。ASP.net通用处理程序

我用我的网页上的图片验证码:

<a href="#"><img id="slide-3" src="~/Image_Handler.ashx?SL=/SL1&US=Kim&ID=1 alt="Tulips" title="Tulips" /></a> 

当我的页面加载图像不会加载。然而,我在我的网页上放了一个按钮,并给了PostBackUrl相同的URL,它打开了一个新窗口,并显示图片完全正常。

这是我的Image_handler代码(通用处理器)

using System; 
using System.Collections.Generic; 
using System.Configuration; 
using System.Data; 
using System.Data.SqlClient; 
using System.Web; 

namespace WEB_2._0_Programing.Private 
{ 
/// <summary> 
/// Summary description for Image_Handler 
/// </summary> 
public class Image_Handler : IHttpHandler 
{ 

    public void ProcessRequest(HttpContext context) 
    { 

     String id; 
     String Slideshow = context.Request.QueryString["SL"]; 
     String Username = context.Request.QueryString["US"]; 
     id = context.Request.QueryString["ID"]; 

     if (Slideshow != null) 
     { 
      SqlConnection connection = new SqlConnection("Data Source=KAMY-WIN7\\SQLEXPRESS;Initial Catalog=MainDataBase;Integrated Security=True;Pooling=False"); 

      String query = "SELECT identity(int,1,1) ID,Image into #temp FROM UserImage where (Username = @username) AND (Slideshow = @slideshow) SELECT * FROM #temp WHERE ([email protected])"; 
      SqlCommand command = new SqlCommand(query, connection); 
      command.Parameters.AddWithValue("@username", Username); 
      command.Parameters.AddWithValue("@slideshow", Slideshow); 
      command.Parameters.Add("@id", SqlDbType.Int).Value = int.Parse(id); 
      //command.Parameters.Add("@id", SqlDbType.Int).Value = id; 
      connection.Open(); 
      SqlDataReader dReader = command.ExecuteReader(); 
      dReader.Read(); 
      context.Response.ContentType = "image/jpeg"; 
      Byte[] Image = (Byte[])dReader["Image"]; 
      context.Response.BinaryWrite(Image); 
      dReader.Close(); 
      connection.Close(); 
     } 
     context.Response.Write("NOT OK!!!"); 

    }  

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

}

上这一部分的错误是在页面加载context.Request.QueryString [];不会返回任何值,但是当我使用一个按钮,并给出相同的src它工作正常.. 请帮助我不知道是什么问题。

+0

您不必在src属性的值的末尾关闭报价。 – yoozer8

回答

1

两件事情:

  1. 你的src属性没有关闭"
  2. 您需要url encode特殊字符,如在你的查询字符串/

例如为:

<img src='~/Image_Handler.ashx?SL=<%= HttpUtility.UrlEncode("/SL1") %>&US=Kim&ID=1' />