출처 : http://blog.naver.com/umjunil?Redirect=Log&logNo=140035839239
정말 간만에 다시 글을 쓰게 되었네여~
세월아~
네월아~~
오늘은 자동가입방지,
또는 자동댓글/글쓰기 방지를 위해 뭐좀 하나 만들어 보았습니다.
이번 방법은 제네릭 처리기를 이용하려고 합니다.
우선 다음과 같이 제네릭 처리기를 새항목 추가
합니다.
제네릭 처리기가 뭘까 해서 MSDN 을 보니…. 안나왔더군요~
ㅋ
우선 제네릭 처리기를 생성해 보기로 하겠습니다.
<![endif]>
끙..
단순히 IHttpHandler 를 상속하였네요~
친절하게도 Hello
World 와 함께 말이져~
요놈은 IIS
에 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll
과 같이 매핑이 되어있으며,
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\Web.Config 에
<add
path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory"
validate="true" /> 과 같이 핸들러가 등록 되어 있군요~,
결론은
IHttpHandler 를 구현하라는 것이네요.
그럼
ConfirmBitmapHandler.ashx 의 소스를 보여드립니다.
<%@ WebHandler Language="C#" Class="ConfirmBitmapHandler" %> using System; using System.Web; using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Drawing2D; using System.Web.SessionState; public class ConfirmBitmapHandler : IHttpHandler, IRequiresSessionState { public void
ProcessRequest (HttpContext context)
{
context.Response.ContentType = "image/jpeg";
// 이미지
사이즈 int lenX = 80, lenY = 30;
Bitmap bm
= new Bitmap( lenX, lenY );
Graphics g
= Graphics.FromImage( bm
);
// 배경으로
그라데이션
처리 LinearGradientBrush bgGr = new LinearGradientBrush( new Point(0,0), new Point(lenX,
lenY), Color.Blue, Color.Black);
g.FillRectangle(
bgGr, 0, 0, lenX, lenY );
// 5자리
숫자의
난수를
발생하여
텍스트를
만든다
string text = string.Empty; Random rnd = new
Random(); for(int i=0; i<5;
i++)
{ text +=
rnd.Next(9).ToString();
}
// 텍스트를
그린다. Brush textBrush
= new SolidBrush( Color.White ); g.DrawString(
text, new Font("굴림", 15), textBrush, 10, 5, StringFormat.GenericDefault );
// 스트림에
비트맵을
쓴다. bm.Save(
context.Response.OutputStream, ImageFormat.Jpeg
);
// 5자리
숫자를
세션에
담는다.
context.Session["ValidateString"] =
text; } public bool
IsReusable { get { return false;
} } } |
그럼 이제 우리가 만든
ConfirmBitmapHandler.ashx 를 브라우져 보기를 통해 실행해 보십시오
실행결과>>>
<![endif]>
오오~~~~~
짝짝짝~~ 잘 실행이 되었네여~
그럼 다음으로 방금 만든 전처리기를 이용하여
웹어플케이션을 만들어 봅시다.
소스 (
Default.aspx )
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML
1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> private void
Page_Load(object sender, EventArgs e) { } protected void
lnkValidate_Click(object sender, EventArgs e) { string validateString = (string)Session["ValidateString"] ?? string.Empty; if (txtValidateString.Text == validateString
)
lblResult.Text = "오케이~~ 통과~!"; else lblResult.Text = "틀렷삼~~~~~ "; } </script> <script type="text/javascript"> function checkEnter() { if( event.keyCode ==
13 )
{
__doPostBack('lnkValidate','');
} else return true; } </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>제목
없음</title> </head> <body> <form id="form1" runat="server"> <div> <img src="ConfirmBitmapHandler.ashx" /> <p></p> <asp:TextBox ID="txtValidateString" runat="server" onkeypress="return
checkEnter()"></asp:TextBox> <asp:LinkButton ID="lnkValidate"
runat="server"
OnClick="lnkValidate_Click">확인</asp:LinkButton> <p></p> <asp:Label ID="lblResult" runat="server"></asp:Label> </div> </form> </body> </html> |
이 소스는 대부분 어렵지 않게 보실 수 있을 것 같아서
특별히 주석은 안달았습니다.
'PP > TIP' 카테고리의 다른 글
DataTable 수동으로 만들고 값넣기. (0) | 2012.01.08 |
---|---|
ASP.NET에서 오류 보고 페이지를 만드는 방법 (0) | 2012.01.08 |
C# 인터넷 연결 체크하기 (0) | 2012.01.07 |
자동 업데이트 (0) | 2012.01.07 |
HttpContext, HttpWebRequest, HttpWebResponse, Application 등의 경로 (0) | 2012.01.07 |