작년 9월쯤에 그림을 생성하는 기능을 작업하고 있었는데, 물론 생성된 그림은 서버의 특정 디렉토리에 보관되었다가 일정 기간이 지나면 직접 그려야 했습니다. , 너무 귀찮았는데 이 단락을 찾았습니다. 코드, 오늘은 .ashx 파일을 사용하여 IHttpHandler를 처리하여 텍스트 및 바이너리 데이터 전송을 구현하는 방법을 살펴보았습니다. 갑자기 이 사용법이 잘 논의되었다는 것을 알았습니다. 아마도 중국의 공식 문서에서는 이에 대해 자세히 소개하지 않고 대신 다른 방법을 권장했을 것입니다.
//---------------
//원하는 이미지 형식을 선택하세요.
//--------------------------------
byte[] byteArr = (byte[]) oChartSpace.GetPicture ("png", 500, 500);
//---------------
// 나중에 HttpHandler가 선택할 수 있도록 차트 이미지를 세션에 저장합니다.
//-------------------------------
HttpContext ctx = HttpContext.Current;
문자열 차트ID = Guid.NewGuid().ToString();
ctx.Session [차트ID] = byteArr;
imgHondaLineup.ImageUrl = string.Concat ("chart.ashx?", ChartID);
Chart.ashx에 다음 문장이 있습니다
.<% @ WebHandler 언어="C#" class="AspNetResources.Owc.ChartHandler" codebehind="chart. ashx .cs" %>
실제로
web.config의 <system.web>에
<httpHandlers>를
추가하는 대신 이를 사용할 수도 있습니다.
<add verb="*" path="*.ashx" type="AspNetResources.Owc, ChartHandler " verify="false" /> /*ChartHandler는 ashx.cs가 컴파일된 후 생성된 코드 Assembly입니다*/
<!--이후의 모든 요청을 수집하므로 Error.aspx가 .Text에 의존하지 않는지 확인하세요 -->
<add verb="*" path="Error.aspx" type="System.Web.UI.PageHandlerFactory" />
</httpHandlers>
어떤 것을 사용하든 상관 없습니다. 일단 구성하면 경로가 더 편리합니다. 실제로 이 아이디어의 적용은 .text에서 잘 알려져 있지만 적용 방향은 다릅니다. .
시스템을 사용하는ashx.cs 파일의 코드
;
System.Web.SessionState 사용;
System.IO 사용;
System.Web 사용,
네임스페이스 AspNetResources.Owc
{
공용 클래스 ChartHandler: IHttpHandler, IReadOnlySessionState
{
공개 bool은 재사용 가능
{
{참을 반환}을 얻습니다;
}
공개 무효 ProcessRequest(HttpContext ctx)
{
문자열 차트ID = ctx.Request.QueryString[0];
배열 arr = (배열) ctx.Session [chartID]
ctx.ClearError();
ctx.Response.Expires = 0;
ctx.Response.Buffer = 참;
ctx.Response.Clear();
MemoryStream memStream = new MemoryStream((byte[])arr);
memStream.WriteTo(ctx.Response.OutputStream);
memStream.Close();
ctx.Response.ContentType = "이미지/png";
ctx.Response.StatusCode = 200;
ctx.응답.끝()
}
}
}