前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ashx输出文字,执行JavaScript,输出图片等

ashx输出文字,执行JavaScript,输出图片等

作者头像
javascript.shop
发布2019-09-04 15:52:23
1.4K0
发布2019-09-04 15:52:23
举报
文章被收录于专栏:杰的记事本杰的记事本

一提到Ashx文件,我们就会想到http handler以及图片加载(在之前我们一般使用ASPX或者Webservice去做),一般做法如下:

Handler.ashx:
<%@ WebHandler Language=”C#” Class=”Handler” %>
using System;
using System.IO;
using System.Web;
public class Handler : IHttpHandler {

public bool IsReusable {
   get {
   return true;
   }
}
public void ProcessRequest (HttpContext context) {
   context.Response.ContentType = “image/jpeg”;
   context.Response.Cache.SetCacheability(HttpCacheability.Public);
   context.Response.BufferOutput = false;
   PhotoSize size;
   switch (context.Request.QueryString[“Size”]) {
   case “S”:
     size = PhotoSize.Small;
     break;
   case “M”:
     size = PhotoSize.Medium;
     break;
   case “L”:
     size = PhotoSize.Large;
     break;
   default:
     size = PhotoSize.Original;
     break;
   } 
   Int32 id = -1;
   Stream stream = null;
   if (context.Request.QueryString[“PhotoID”] != null && context.Request.QueryString[“PhotoID”] != “”) {
   id = Convert.ToInt32(context.Request.QueryString[“PhotoID”]);
   stream = PhotoManager.GetPhoto(id, size);
   } else {
   id = Convert.ToInt32(context.Request.QueryString[“AlbumID”]);
   stream = PhotoManager.GetFirstPhoto(id, size);
   }
   if (stream == null) stream = PhotoManager.GetPhoto(size);
   const int buffersize = 1024 * 16;
   byte[] buffer = new byte[buffersize];
   int count = stream.Read(buffer, 0, buffersize);
   while (count > 0) {
   context.Response.OutputStream.Write(buffer, 0, count);
   count = stream.Read(buffer, 0, buffersize);
   }
}
}

*.aspx:
<img src=”myHttpHander.ashx?id=123″ width=”20″ height=”20″ />

还可以嵌入文字: Handler.ashx: <%@ WebHandler Language=”C#” Class=”TestHandler” %> using System; using System.Web; public class TestHandler : IHttpHandler {      public void ProcessRequest (HttpContext context) {          context.Response.ContentType = “text/plain”;          context.Response.Write(“document.write(\”Hello World\”);”);      }

     public bool IsReusable {          get {              return false;          }      } } *.aspx: <script type=”text/javascript” src=”TestHandler.ashx” />

我们变通以下,发现其实除了可以输出图片以外,还可以输出文字: Handler.ashx: <%@ WebHandler Language=”C#” Class=”Handler” %> using System; using System.Web; public class Handler : IHttpHandler {      public void ProcessRequest (HttpContext context) {          context.Response.ContentType = “text/plain”;          context.Response.Write(“alert(‘hi’)”);      }      public bool IsReusable {          get {              return false;          }      } }

*.aspx: 弹出alert <script src=”Handler.ashx”></script> 也可以把.ashx当成css文件 <link href=”css/Handler.ashx” rel=”stylesheet” type=”text/css”> xml文件 orderDoc.load(“Handler.ashx”);

当你希望从ashx或HttpHandler里访问你的Session时,你必须实现IReadOnlySessionState接口.

代码:

using System; using System.Web; using System.Web.SessionState;

public class DownloadHandler : IHttpHandler, IReadOnlySessionState {    public bool IsReusable { get { return true; } }    public void ProcessRequest(HttpContext ctx)    {        ctx.Response.Write(ctx.Session[“fred”]);    } }

其实,学习的思路不应该这样,以上除了图片外,我们都用偏了,为什么用偏了呢,因为软件以简单、实用为主,我们只是把以上纯粹看成可一项技术而没有把它放到软件的地位去考虑:) 具体的用途,大家可以参考Rewirte.dll (这个dll,可以使服务器支持伪静态的)! 反编译,看看人家做的:)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2009年11月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档