原文:http://www.cnblogs.com/jerry0925/articles/901936.html
Ashx文件,我们可用用来作图片加载(在之前我们一般使用ASPX或者Webservice去做),一般做法如下:
Handler.ashx:
1
<%
@ WebHandler Language
=
"
C#
"
Class
=
"
Handler
"
%>
2 using System;
3 using System.IO;
4 using System.Web;
5 public class Handler : IHttpHandler {
6
7public bool IsReusable {
8 get {
9 return true;
10 }
11}
12public void ProcessRequest (HttpContext context) {
13 context.Response.ContentType = "image/jpeg";
14 context.Response.Cache.SetCacheability(HttpCacheability.Public);
15 context.Response.BufferOutput = false;
16 PhotoSize size;
17 switch (context.Request.QueryString["Size"]) {
18 case "S":
19 size = PhotoSize.Small;
20 break;
21 case "M":
22 size = PhotoSize.Medium;
23 break;
24 case "L":
25 size = PhotoSize.Large;
26 break;
27 default:
28 size = PhotoSize.Original;
29 break;
30 }
31 Int32 id = -1;
32 Stream stream = null;
33 if (context.Request.QueryString["PhotoID"] != null && context.Request.QueryString["PhotoID"] != "") {
34 id = Convert.ToInt32(context.Request.QueryString["PhotoID"]);
35 stream = PhotoManager.GetPhoto(id, size);
36 } else {
37 id = Convert.ToInt32(context.Request.QueryString["AlbumID"]);
38 stream = PhotoManager.GetFirstPhoto(id, size);
39 }
40 if (stream == null) stream = PhotoManager.GetPhoto(size);
41 const int buffersize = 1024 * 16;
42 byte[] buffer = new byte[buffersize];
43 int count = stream.Read(buffer, 0, buffersize);
44 while (count > 0) {
45 context.Response.OutputStream.Write(buffer, 0, count);
46 count = stream.Read(buffer, 0, buffersize);
47 }
48}
49}
50
51
2 using System;
3 using System.IO;
4 using System.Web;
5 public class Handler : IHttpHandler {
6
7public bool IsReusable {
8 get {
9 return true;
10 }
11}
12public void ProcessRequest (HttpContext context) {
13 context.Response.ContentType = "image/jpeg";
14 context.Response.Cache.SetCacheability(HttpCacheability.Public);
15 context.Response.BufferOutput = false;
16 PhotoSize size;
17 switch (context.Request.QueryString["Size"]) {
18 case "S":
19 size = PhotoSize.Small;
20 break;
21 case "M":
22 size = PhotoSize.Medium;
23 break;
24 case "L":
25 size = PhotoSize.Large;
26 break;
27 default:
28 size = PhotoSize.Original;
29 break;
30 }
31 Int32 id = -1;
32 Stream stream = null;
33 if (context.Request.QueryString["PhotoID"] != null && context.Request.QueryString["PhotoID"] != "") {
34 id = Convert.ToInt32(context.Request.QueryString["PhotoID"]);
35 stream = PhotoManager.GetPhoto(id, size);
36 } else {
37 id = Convert.ToInt32(context.Request.QueryString["AlbumID"]);
38 stream = PhotoManager.GetFirstPhoto(id, size);
39 }
40 if (stream == null) stream = PhotoManager.GetPhoto(size);
41 const int buffersize = 1024 * 16;
42 byte[] buffer = new byte[buffersize];
43 int count = stream.Read(buffer, 0, buffersize);
44 while (count > 0) {
45 context.Response.OutputStream.Write(buffer, 0, count);
46 count = stream.Read(buffer, 0, buffersize);
47 }
48}
49}
50
51
*.aspx:
<img src="myHttpHander.ashx?id=123" width="20" height="20" />
我们变通以下,发现其实除了可以输出图片以外,还可以输出文字:
Handler.ashx:
1
<%
@ WebHandler Language
=
"
C#
"
Class
=
"
Handler
"
%>
2 using System;
3 using System.Web;
4 public class Handler : IHttpHandler {
5
6 public void ProcessRequest (HttpContext context) {
7 context.Response.ContentType = "text/plain";
8 context.Response.Write("alert('hi')");
9 }
10
11 public bool IsReusable {
12 get {
13 return false;
14 }
15 }
16}
17
2 using System;
3 using System.Web;
4 public class Handler : IHttpHandler {
5
6 public void ProcessRequest (HttpContext context) {
7 context.Response.ContentType = "text/plain";
8 context.Response.Write("alert('hi')");
9 }
10
11 public bool IsReusable {
12 get {
13 return false;
14 }
15 }
16}
17
*.aspx:
弹出alert
<script src="Handler.ashx"></script>
也可以把.ashx当成css文件
<link href="css/Handler.ashx" rel="stylesheet" type="text/css">
xml文件
orderDoc.load("Handler.ashx");
还可以嵌入文字:
Handler.ashx:
1
<%
@ WebHandler Language
=
"
C#
"
Class
=
"
TestHandler
"
%>
2 using System;
3 using System.Web;
4 public class TestHandler : IHttpHandler {
5
6 public void ProcessRequest (HttpContext context) {
7 context.Response.ContentType = "text/plain";
8 context.Response.Write("document.write(\"Hello World\");");
9 }
10
11
12
13 public bool IsReusable {
14 get {
15 return false;
16 }
17 }
18}
19
20
2 using System;
3 using System.Web;
4 public class TestHandler : IHttpHandler {
5
6 public void ProcessRequest (HttpContext context) {
7 context.Response.ContentType = "text/plain";
8 context.Response.Write("document.write(\"Hello World\");");
9 }
10
11
12
13 public bool IsReusable {
14 get {
15 return false;
16 }
17 }
18}
19
20
*.aspx:
<script type="text/javascript" src="TestHandler.ashx" />
欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 572064792 | Nodejs:329118122 做人要厚道,转载请注明出处!
本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sunshine-anycall/archive/2009/07/08/1519022.html
,如需转载请自行联系原作者