ASP.net通用处理程序

时间:2013-01-24 19:52:40

标签: c# asp.net generic-handler

我正在尝试将一些参数传递给通用处理程序,并在响应时获取和映像。

我在网页上使用此代码代码:

<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 (ID=@id)";
            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它工作正常.. 请帮助我不知道是什么问题。

1 个答案:

答案 0 :(得分:1)

两件事:

  1. 您的src属性没有结束"
  2. 您需要url encode个特殊字符,例如查询字符串中的/
  3. E.g:

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