Отображение изображения обработчика при нулевой проблеме - PullRequest
0 голосов
/ 15 марта 2011

Я пытаюсь создать обработчик, и я пытаюсь, чтобы он возвращал изображение по умолчанию, когда он возвращает нулевое значение. Но когда я получаю доступ к этому через страницу, используя второй бит кода ниже, я получаю изображение ошибки. Но если я перехожу прямо на страницу Image.ashx? Id = 28 и не существует изображений, я получаю изображение по умолчанию, почему оно не отображается на моей странице? И если изображение существует, оно отображает это изображение на странице и, если оно вызывается напрямую.

Спасибо

Файл My Image.ashx:

    public void ProcessRequest(HttpContext ctx)
    {
        string id = ctx.Request.QueryString["id"];

        SqlConnection con = new SqlConnection(CONN INFO);
        SqlCommand cmd = new SqlCommand("SELECT EventInviteImage FROM Events WHERE EventID = @EventID", con);
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.AddWithValue("@EventID", id);

        byte[] pict = null; 

        try
        {
            con.Open();
            pict = (byte[])cmd.ExecuteScalar();            

            ctx.Response.ContentType = "image/pjpeg";
            ctx.Response.BinaryWrite(pict);
        }
        catch
        {
            ctx.Response.Write("<img src='/images/defaultevent.jpg'>");
        }
        finally
        {
            con.Close();
        }



    }

    public bool IsReusable
    {
        get
        {
            return true;
        }
    }

Изображение вызова:

<img src="Image.ashx?id=28" />

1 Ответ

2 голосов
/ 15 марта 2011
try
{
   ...
   ctx.Response.ContentType = "image/pjpeg";
   ctx.Response.BinaryWrite(pict);
}
catch
{
   ctx.Response.ContentType = "image/pjpeg";
   ctx.Response.Write("<img src='/images/defaultevent.jpg'>");
}

Вы делаете очень разные вещи в try и catch - вместо того, чтобы писать string в вашем улове, вы должны вернуть файл:

catch
{
  ctx.Response.WriteFile("path to defaultevent.jpg");
}
...