C# 创建ASP.Net处理程序以以字节形式返回图像
我正在考虑创建一个处理程序,根据传递的id返回图像,我以前没有创建过自己的处理程序,当我创建它时,它提到必须向IIS注册。这个项目被分发到很多客户机,我是否需要更改每个客户机的IIS,或者是否有办法解决这个问题,或者是处理程序的替代方案 编辑:作为对以下内容的回应,这是我创建的(但尚未测试),因此我需要为此更改IIS或web.config中的任何内容吗C# 创建ASP.Net处理程序以以字节形式返回图像,c#,asp.net,C#,Asp.net,我正在考虑创建一个处理程序,根据传递的id返回图像,我以前没有创建过自己的处理程序,当我创建它时,它提到必须向IIS注册。这个项目被分发到很多客户机,我是否需要更改每个客户机的IIS,或者是否有办法解决这个问题,或者是处理程序的替代方案 编辑:作为对以下内容的回应,这是我创建的(但尚未测试),因此我需要为此更改IIS或web.config中的任何内容吗 public class Photos : IHttpHandler { #region IHttpHandler Members
public class Photos : IHttpHandler
{
#region IHttpHandler Members
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
//write your handler implementation here.
var img = Image.FromFile(@"C:\Projects\etc\logo.jpg");
context.Response.ContentType = "image/jpeg";
img.Save(context.Response.OutputStream, ImageFormat.Jpeg);
}
#endregion
}
您可以创建一个继承
IHttpHandler
的类,并在该类中获取id(来自查询字符串或类似内容),处理请求并返回二进制数据。不应该向IIS注册它
public class MyHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
//Get Id from somewhere
//Get binary data
context.Response.ContentType = "application/octet-stream";
context.Response.BinaryWrite(bytes);
}
}
您可以将通用处理程序添加到项目中(一个
.ashx
文件)。它将为您提供一个带有代码隐藏的文件,如下所示(摘录):
您可以使用context
获取查询字符串或路由参数,并使用context.Response
属性写入图像。将返回的内容类型更改为图像内容类型,即可设置
您可以将图像src
设置为:“Handler1.ashx?id=12345”
,也可以添加指向处理程序的漂亮url路由
无需为此配置IIS。HttpHandler已在网站的web.config中注册,如果您将配置文件与网站一起分发,则无需更改IIS配置。您可以查看这篇关于处理程序的博文,我认为这与您想要做的非常接近。到目前为止您得到了什么?请参阅编辑,建立正常,但不返回图像,尽管检查路径是正确的。是的,这看起来很好,我!其次,这是解决这个问题的方法,
jpeg
返回类型比octet-stream
更好,使客户更清楚地了解他们得到了什么。谢谢,使用测试,但不显示图像。是不是可能我错过了什么,还是一定是asp图像控件?@WillemDuncan是的!我相信他在编辑之前的问题提到了返回二进制数据,这就是我设置octect-stream
…@user1166905导航到http://localhost:{port}/Photos.ashx
?
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Write("Hello World");
}