データベースから画像を読み取り、Webページに表示するために使用される次のハンドラークラスを作成しました。
<%@ WebHandler Language="C#" Class="Handler" %>
using System;
using System.Configuration;
using System.Data.SqlClient;
using System.Web;
public class Handler : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["IranQRDBConnectionString"].ConnectionString);
public void ProcessRequest(HttpContext context)
{
try
{
string TableName = context.Session["TableToQuery"].ToString();
string ID = context.Session["ID"].ToString();
SqlCommand comm = new SqlCommand("SELECT * FROM " + TableName + " WHERE ID=" + ID, conn);
conn.Open();
SqlDataReader dr = comm.ExecuteReader();
dr.Read();
context.Response.ContentType = "image/jpeg";
context.Response.BinaryWrite((byte[])dr["Image"]);
conn.Close();
}
catch
{
SqlCommand comm = new SqlCommand("SELECT * FROM DefaultImage WHERE ID=1", conn);
conn.Open();
SqlDataReader dr = comm.ExecuteReader();
dr.Read();
context.Response.ContentType = "image/jpeg";
context.Response.BinaryWrite((byte[])dr["Image"]);
conn.Close();
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
このクラスは私のローカルでうまく機能します!Webサイトをアップロードしましたが、データベースにクエリを実行すると、画像が画像コントロールに表示されない場合を除いて、すべてのデータがWebページに返されます。Webを検索したところ、ハンドラーをweb.config
ファイルに登録する必要があり、IISバージョンはホスト上で7であり、統合モードで実行されていることがわかりました。だから私はそのハンドラーをの<System.webserver><Handlers>
一部に登録する必要があることを知っていweb.config
ます。
詳細については、ハンドラークラスをディレクトリではなくプロジェクトのルートディレクトリに追加しましたApp_Code
。そして、私はWebサイトをプリコンパイルされたWebサイトとしてアップロードHandler.ashx
し、ルートディレクトリにプリコンパイルされ、App_Web_handler.ashx.cdcab7d2.dll
ファイルをに持っていますApp_Code
。
私も追加しました:
<add name="ImageHandler" verb="*" path="*.jpg" type="Handler" />
私のweb.config
ファイルでは、それでも機能しません:(
誰かが正しい登録を見つけるのを手伝ってくれませんか?