您好我想知道是否有人修改了servicestack中的restfiles示例, 这样它可以从文件系统中返回未更改的xml文件吗?
换句话说,充当web服务器(IIS,cassini或apache等),但使用servicestack附带的REST映射。
目前响应已预先格式化,我无法看到如何更改。
答案 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兼容版本的示例? ...再次感谢您的出色工作