使用servicestack通过REST返回不变的xml文件

时间:2012-08-07 17:16:08

标签: xml servicestack

您好我想知道是否有人修改了servicestack中的restfiles示例, 这样它可以从文件系统中返回未更改的xml文件吗?

换句话说,充当web服务器(IIS,cassini或apache等),但使用servicestack附带的REST映射。

目前响应已预先格式化,我无法看到如何更改。

2 个答案:

答案 0 :(得分:1)

RestFiles示例已经展示了如何return physical files from the filesystem

return new HttpResult(targetFile, asAttachment:true);

这显示了使用自定义HttpResult返回下载文件的另一个示例:https://stackoverflow.com/a/9843621/85785

答案 1 :(得分:1)

我只想展示我对原始问题的解决方案,以防其他人想要修改restfiles示例的行为。 mod允许您在不更改文件内容的情况下将xml或其他文件类型返回给浏览器:

public override object OnGet(Files request)
{
    var targetFile = GetAndValidateExistingPath(request);
    var isDirectory = Directory.Exists(targetFile.FullName);
    var hasParameters = this.RequestContext.AbsoluteUri.ToString().Contains("?") ? true : false;

    if (!isDirectory && request.ForDownload)
        return new HttpResult(targetFile, asAttachment:true);

    if (string.IsNullOrEmpty(targetFile.Name) || hasParameters)
    {
        var response = isDirectory
            ? new FilesResponse { Directory = GetFolderResult(targetFile.FullName) }
            : new FilesResponse { File = GetFileResult(targetFile) };
        return response;
    }
    return new HttpResult(targetFile);
}

所以基本上如果incomming请求为空或者有参数,那么我们返回一个filesresponse,否则我们返回一个直接显示文件内容的HttpResult。 我希望这对某人有用。

Mythz:如果代码中有问题,请告诉我们。我试图将示例转换为.Net 4.0,但它破坏了某个地方,并且/#!文件中的ajax文件内容查看和列表部分没有显示出来。 (也许我在vs2010转换期间在web.config中丢失了一些东西)。您是否会在不久的将来发布4.0兼容版本的示例? ...再次感谢您的出色工作