c# - 第二个参数干扰通用处理程序

标签 c# asp.net parameters webforms generic-handler

我的问题是这样的。当我只有一个参数可供搜索时,我的图像控件可以工作,当我尝试传递第二个参数时,图像控件不起作用。 我使用通用处理程序作为 image.URL,因为我希望能够从数据库中提取图像,或者从驱动器中选择一个图像来替换数据库副本。

好的,所以在删除了对版本的所有引用(这是导致问题的第二个参数)之后,我发现这一行 string version = context.Request.QueryString["Version"].ToString() ; 在 ImageHandler.ashx 中,导致了问题。

我的代码如下...

 public class ImageHandler : IHttpHandler
{       
    public void ProcessRequest(HttpContext context)
    {
        TemplateData imgData = null;
        string schemeCode = context.Request.QueryString["schemeCode"].ToString();
        string version = context.Request.QueryString["Version"].ToString();

        if(!String.IsNullOrEmpty(schemeCode)) imgData  = DataClass.ReturnData(schemeCode);


        if (imgData != null)
        {
            context.Response.ContentType = "image/jpeg";
            context.Response.BinaryWrite(imgData.Logo);
            context.Response.OutputStream.Write(imgData.Logo, 0, imgData.Logo.Length);

        }
    }

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

背后的男女同校......

        protected void btnSearch_Click(object sender, EventArgs e)
    {
        if (ddSchemeCode.SelectedIndex > 0)
        {
            // Existing Data to load from database
            TemplateData temp = DataClass.ReturnData(ddSchemeCode.SelectedItem.Text);
            if (temp != null)
            {

                txtVersion.Text = temp.Version;
                txtComment.Text = temp.Comment;
                txtSchemeCode.Text = temp.SchemeCode;
                txtTemplateId.Text = temp.TemplateId;
                imgLogo.ImageUrl = String.Format("ImageHandler.ashx?schemeCode={0}", ddSchemeCode.SelectedItem.Text);
            }
        }

ReturnData 方法...

        public static TemplateData ReturnData(string schemeCode)
    {
        string sqlInstructionCstmID = "SELECT TOP(1) LetterTemplateCustomisationId, TemplateId, Logo, SchemeCode, Version, Comment FROM LetterTemplateCustomisation WHERE SchemeCode ='" + schemeCode + "' ";

        string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["LettersDatabase"].ConnectionString;
        SqlConnection connect = new SqlConnection(connectionString);

        SqlCommand command = new SqlCommand(sqlInstructionCstmID, connect);

        command.CommandType = CommandType.Text;

        connect.Open();

        SqlDataReader dr = command.ExecuteReader();

        TemplateData tempData = null;
        if (dr.HasRows)
        {
            dr.Read();
            tempData = new TemplateData(dr);
        }

        dr.Close();
        connect.Close();

        return tempData;
    }

所以如果我将额外的参数传递给 ReturnData 方法,则不会显示任何图像。

非常感谢你们。 谢谢

最佳答案

我创建了一个测试来模拟您正在尝试做的事情,错误只发生了一次,而且我无法再重现它。我意识到我并不总是在编译代码。然后我开始一直编译,错误不再发生。

可以查看代码here .

只要打电话 ~/Handler1.ashx?schemeCode=whatever&Version=a ~/Handler1.ashx?schemeCode=whatever&Version=b 或者 ~/Handler1.ashx?schemeCode=whatever&Version=c

您应该会看到三张不同的图片。

您在访问 QueryString 后立即调用 .ToString():

        string schemeCode = context.Request.QueryString["schemeCode"].ToString();
    string version = context.Request.QueryString["Version"].ToString();

如果在您的测试中您在更改此行时忘记编译,您可能会出现一些不一致的行为,因为它可能会抛出 NullReferenceException。

关于c# - 第二个参数干扰通用处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30571235/

相关文章:

c# - 显示最近查看的项目

c# - 我应该如何处理可选查询字符串的值?

c# - 如何打开与我的 MVC 项目相关的文本文件?

c# - 单行子查询返回多行 Oracle 数据库

c# - WCF 休息。是否可以将从客户端收到的请求记录到数据库中?

asp.net - ASP.NET 应用程序启动速度非常慢

c# - GridView - SqlDataSource 中的客户端 "WHERE"子句?

javascript - 是否可以使用 rest 运算符提供默认参数

java - 将哈希表作为参数传递给方法会抛出空指针异常

python - "unpacking"将字典传递到 Python 中函数的 namespace ?