一提到ashx文件,我们就会想到http handler以及图片加载(在之前我们一般使用aspx或者webservice去做),一般做法如下:
handler.ashx:
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);
}
}
}
我们变通以下,发现其实除了可以输出图片以外,还可以输出文字:
handler.ashx:
public bool isreusable {
get {
return false;
}
}
}
xml文件
orderdoc.load("handler.ashx");
还可以嵌入文字:
handler.ashx:
public bool isreusable {
get {
return false;
}
}
}
当你希望从ashx或httphandler里访问你的session时,你必须实现ireadonlysessionstate接口.
代码:
public class downloadhandler : ihttphandler, ireadonlysessionstate
{
public bool isreusable { get { return true; } }
public void processrequest(httpcontext ctx)
{
ctx.response.write(ctx.session["fred"]);
}
}
如对本文有疑问, 点击进行留言回复!!
(精华)2020年7月21日 ASP.NET Core 容器伪属性注入
网友评论