3

谁能给我一个关于如何获得返回字节数组的 OpenRasta 处理程序的快速指针。在 ResourceSpace 中公开,而不是 JSON 或 XML 对象。即我不希望它转码,我只想能够将媒体类型设置为“图像/PNG”或类似的。

使用 ASP.Net MVC 我可以使用 FileContentResult 通过返回

File(myByteArray, "image/PNG");

我只需要知道 OpenRasta 等价物。

谢谢

4

3 回答 3

10

您可以只返回一个字节数组作为处理程序的一部分,但最终将作为 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 标头。

于 2009-12-23T12:02:37.920 回答
2

我在 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));
    }
}
于 2009-12-23T11:56:04.420 回答
0

好吧,那里有一些流编解码器,但是您可以像这样简单地做到这一点

ResourceSpace.Has.ResourcesOfType<byte[]>()
                .AtUri("/MyImageUri")
                .HandledBy<ImageHandler>();

在我的例子中,Image 处理程序返回一个由 System.Drawing.Graphics 对象组成的字节数组。

任何其他能更清楚地说明这个话题的答案都将不胜感激。

于 2009-12-23T11:53:52.537 回答