专栏首页杰的记事本ashx输出文字,执行JavaScript,输出图片等

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

一提到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,可以使服务器支持伪静态的)! 反编译,看看人家做的:)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • (数据科学学习手札68)pandas中的categorical类型及应用

      categorical是pandas中对应分类变量的一种数据类型,与R中的因子型变量比较相似,例如性别、血型等等用于表征类别的变量都可以用其来表示,本文就将...

    Feffery
  • 深入理解ES6之—对象

    在js中比较两个值时,你可能会用相等运算符==或者严格相等运算符 ===。为了避免在比较时发生强制类型转换,许多开发者更倾向于使用后者。

    寻找石头鱼
  • ES6--对象的扩展

    属性和方法的简写一般作为函数函数的返回值, 对象属性的赋值器和构造器, 以及CommonJS 模块输出一组变量,就非常合适使用简洁写法。

    Clearlove
  • Jackson快速替换Fastjson,Cannot construct......cannot deserialize

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    chenchenchen
  • .NET WebAPI中使用Session使用

    今天做项目的时候因为需要编写一个短信验证码的接口我需要在我的后台.net webapi中存入我随机生成的短信验证码方便与前端传递过来的数据对比,所以决定使用s...

    追逐时光
  • 被忽略的console.log

    除了console.log之外,还有更多方式调试JavaScript来输出值。 看起来很明显我们没有。

    frontoldman
  • async函数

    Generator函数的执行必须靠执行器,所以才有co模块,而async函数自带执行器。

    用户3258338
  • ES6 对象的扩展

    上面代码表明,ES6 允许在对象之中,直接写变量。这时,属性名为变量名, 属性值为变量的值

    Leophen
  • Could not autowire. No beans of 'xxx' type found

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    chenchenchen
  • Web安全性测试介绍

    安全性测试主要是指利用安全性测试技术,在产品没有正式发布前找到潜在漏洞。找到漏洞后,需要把这些漏洞进行修复,避免这些潜在的漏洞被非法用户发现并利用。像我们测试...

    只喝牛奶的杀手

扫码关注云+社区

领取腾讯云代金券