繁体   English   中英

将参数传递给通用处理程序

[英]Passing a parameter into a generic handler

正确,因此我要通过“方案代码”从数据库中提取信息,并将其显示在可修改或创建新记录的Web表单上。 为了得到图像,我创建了一个通用处理程序作为一种虚拟地址。

我在将dropdownlist.selectedItem.Text (在其中为所需记录选择方案代码的位置)值传递到通用处理程序的参数时遇到了麻烦。 我可以直接传入一个字符串,然后选择特定的Scheme代码即可,并且一切正常。

这是SQL命令代码

        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;
    }

具有空参数的通用处理程序...

    public class ImageHandler : IHttpHandler
{       
    public void ProcessRequest(HttpContext context)
    {
        TemplateData imgData = DataClass.ReturnData();


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

            context.Response.Flush();
        }
    }

这是背后的代码

        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 = "ImageHandler.ashx"
            }
        }

所以它是TemplateData imgData = DataClass.ReturnData();的空参数TemplateData imgData = DataClass.ReturnData(); 我遇到困难。

和往常一样,在此先感谢大家!

DataClass.ReturnData(); 无法使用,因为它没有为所需的schemeCode参数提供值。

您应该创建不带该参数的另一个方法,或者提供一个默认值,例如null ,它将在SQL语句中忽略过滤器。

例如:

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

    if (!string.IsNullOrEmpty(schemeCode))
    {
        sqlInstructionCstmID += " WHERE SchemeCode ='" + schemeCode + "'";
    }

请注意,出于多种原因,您应该确保使用参数化查询

另一个选项(如果适用)因此将值通过HttpHandler传递。 一种方法是使用URL参数。

string schemeCode = Request.Querystring["schemeCode"];

然后像这样传递它:

http://someurl/handler.ashx?schemeCode=123

如果您现在不使用参数化查询,则上面是一个SQL漏洞。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM