Handler

httphandler就是来处理客户端对服务器端请求的中转站 后缀名是ashx


案例

namespace BookShop.Handler
{
/// <summary>
/// BookHandler 的摘要说明
/// </summary>
public class BookHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string fileName = context.Request.Url.ToString(); //获取请求的地址
fileName = fileName.Substring(fileName.LastIndexOf('/') + 1);
string bookPic = context.Server.MapPath("/images/BookCovers/" + fileName);
Image book;
if (File.Exists(bookPic))
{
//读取对应的图片
book = Image.FromFile(bookPic);
//读取水印图片
Image water = Image.FromFile(context.Server.MapPath("/images/WaterMark.jpg"));
//画布
Graphics g = Graphics.FromImage(book);
//在画布上❀水印
g.DrawImage(water, book.Width - water.Width, book.Height - water.Height);
g.Dispose(); //释放资源
water.Dispose(); //释放

}
else
{
//如果请求图书不存在,返回默认图片
book = Image.FromFile(context.Server.MapPath("/Images/default.jpg"));
}
context.Response.ContentType = "image/jpeg"; //设置输出格式
//向客户端输出图片流
book.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
book.Dispose(); //释放
}

public bool IsReusable
{
get
{
return false;
}
}
}
}

 

handler配置 system.webServer

<system.webServer>
<handlers><!--配置handler-->
<!--type属性需要明确命名空间-->
<add name="bookWater" verb="*" path="/images/BookCovers/*.jpg" type="BookShop.Handler.BookHandler"/>
</handlers>
</system.webServer>

 

客户端通过浏览器向服务器发送请求中间由aspnet_isapi.dll 再有Application 再由WebModule 再由WebHandler给向客户端

配置项中 谁访问了Path中 那么就要去WebModule 中进行处理

posted @ 2018-08-06 21:40  ZaraNet  阅读(122)  评论(0编辑  收藏  举报