谁能给我一个关于如何获得返回字节数组的 OpenRasta 处理程序的快速指针。在 ResourceSpace 中公开,而不是 JSON 或 XML 对象。即我不希望它转码,我只想能够将媒体类型设置为“图像/PNG”或类似的。
使用 ASP.Net MVC 我可以使用 FileContentResult 通过返回
File(myByteArray, "image/PNG");
我只需要知道 OpenRasta 等价物。
谢谢
您可以只返回一个字节数组作为处理程序的一部分,但最终将作为 application/octet-stream 提供。
如果你想返回文件,你可以简单地返回一个 IFile 的实现。
public class MyFileHandler {
public IFile Get(int id) {
var mybytes = new byte[];
return new InMemoryFile(new MemoryStream(mybytes)) {
ContentType = new MediaType("image/png");
}
}
}
您还可以设置 FileName 属性以返回特定文件名,这将为您呈现 Content-Disposition 标头。
我在 OpenRasta 邮件列表中查找了这个,有几个相关的帖子: http : //groups.google.com/group/openrasta/browse_thread/thread/5ae2a6d653a7421e# http://groups.google.com/group/ openrasta/browse_thread/thread/a631d3629b25b88a#
我已经使用以下示例进行了操作:
配置:
ResourceSpace.Has.ResourcesOfType<IFile>()
.AtUri("/customer/{id}/avatar")
.HandledBy<CustomerAvatarHandler>();
处理程序:
public class CustomerAvatarHandler
{
public object Get(int id)
{
const string filename = @"C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Sunset.jpg";
return new InMemoryFile(File.OpenRead(filename));
}
}
好吧,那里有一些流编解码器,但是您可以像这样简单地做到这一点
ResourceSpace.Has.ResourcesOfType<byte[]>()
.AtUri("/MyImageUri")
.HandledBy<ImageHandler>();
在我的例子中,Image 处理程序返回一个由 System.Drawing.Graphics 对象组成的字节数组。
任何其他能更清楚地说明这个话题的答案都将不胜感激。