嗨,我想知道是否有人修改了 servicestack 中的 restfiles 示例,以便它可以从文件系统返回未更改的 xml 文件?
换句话说,充当网络服务器(IIS、cassini 或 apache 等),但使用 servicestack 附带的 REST 映射。
目前响应是预先格式化的,我看不出如何改变它。
嗨,我想知道是否有人修改了 servicestack 中的 restfiles 示例,以便它可以从文件系统返回未更改的 xml 文件?
换句话说,充当网络服务器(IIS、cassini 或 apache 等),但使用 servicestack 附带的 REST 映射。
目前响应是预先格式化的,我看不出如何改变它。
RestFiles 示例已经展示了如何从文件系统返回物理文件:
return new HttpResult(targetFile, asAttachment:true);
这显示了使用自定义 HttpResult 返回下载文件的另一个示例:https ://stackoverflow.com/a/9843621/85785
我只想展示我对原始问题的解决方案,以防其他人希望修改 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);
}
所以基本上如果传入的请求为空或有参数,那么我们返回一个文件响应,否则我们返回一个直接显示文件内容的 HttpResult。我希望这对某人有用。
神话:如果代码有问题..让我们知道。我试图将示例转换为 .Net 4.0,但它在某处中断并且 /#!files 中的 ajax 文件内容查看和列表部分不显示。(也许我在 vs2010 转换期间在 web.config 中丢失了一些东西)。您会在不久的将来发布示例的 4.0 兼容版本吗?...再次感谢您的出色工作