去年の9月頃、私は絵を生成する機能を開発していました。もちろん、生成された絵はサーバー上の特定のディレクトリに置かれ、自分で絵を描く必要がありました。 、面倒すぎましたが、この段落を見つけました。コード、今日は .ashx ファイルを使用して IHttpHandler を処理し、テキストとバイナリ データの送信を実装する方法を見ました。突然、この使用法がよく議論されていることに気づきました。おそらく中国の公式文書では詳細に紹介されておらず、代わりに別の方法が推奨されていました。
//----------------------------------------
// 好みの画像形式を選択します
//--------------------------------
byte[] byteArr = (byte[]) oChartSpace.GetPicture ("png", 500, 500);
//----------------------------------------
// 後で HttpHandler によって取得されるように、チャート画像をセッションに保存します
//------------------------------------------
HttpContext ctx = HttpContext.Current;
string chartID = Guid.NewGuid ().ToString ();
ctx.Session [チャートID] = byteArr;
imgHondaLineup.ImageUrl = string.Concat ("chart.ashx?", chartID);
<% @ WebHandler language="C#" class="AspNetResources.Owc.ChartHandler" codebehind="chart"
に次の文があります
。ashx .cs" %>
実際、
web.config の <system.web> に
<httpHandlers>
を追加する代わりに、これを使用することもできます。
<addverb="*" path="*.ashx" type="AspNetResources.Owc, ChartHandler " validate="false" /> /*ChartHandler は、ashx.cs のコンパイル後に生成されるコード アセンブリです*/
<!-- この後すべてのリクエストを取得するため、Error.aspx が .Text に依存しないようにしてください -->
<addverb="*" path="Error.aspx" type="System.Web.UI.PageHandlerFactory" />
</httpHandlers>
どちらを使用するかは問題ではありません。パスに関係なく、後者の方が便利です。実際、このアイデアの応用は .text でよく知られていますが、応用の方向は異なります。 。
Systemを使用したashx.csファイルのコード
。
System.Web.SessionState を使用します。
System.IO を使用します。
System.Web
名前空間 AspNetResources.Owc
を使用します。
{
パブリック クラス ChartHandler : IHttpHandler、IReadOnlySessionState
{
public bool IsReusable
{
取得 { true を返します }
}
public void ProcessRequest (HttpContext ctx)
{
文字列チャートID = ctx.Request.QueryString[0];
配列 arr = (配列) ctx.Session [チャートID]
;
ctx.Response.Expires = 0;
ctx.Response.Buffer = true;
ctx.Response.Clear ();
MemoryStream memStream = 新しい MemoryStream ((byte[])arr);
memStream.WriteTo (ctx.Response.OutputStream);
memStream.Close();
ctx.Response.ContentType = "画像/png";
ctx.Response.StatusCode = 200;
ctx.Response.End()
;
}
}