servicestack,C#,Xml,Winapi,servicestack" /> servicestack,C#,Xml,Winapi,servicestack" />

C# 通过服务在服务器上编辑XML

C# 通过服务在服务器上编辑XML,c#,xml,winapi,servicestack,C#,Xml,Winapi,servicestack,目前,我有一个基于web的C#应用程序(ServiceStack),它有一个XML文件,它依赖于该文件在客户端生成内容。我不想再将此文件存储在客户端。当文件存储在服务器上时,我需要一种使用我编写的存储库来编辑文件的方法 我尝试了以下方法: 在服务中查找XML的文件位置。(它说服务当前目录是windows/system32,因为它是作为服务运行的。现在有意义了。) 将文件并排放在同一项目中。(同样的问题) 这已经起作用了: 检索XML(硬编码路径:c) 反序列化XML 根据需要添加/删除到X

目前,我有一个基于web的C#应用程序(ServiceStack),它有一个XML文件,它依赖于该文件在客户端生成内容。我不想再将此文件存储在客户端。当文件存储在服务器上时,我需要一种使用我编写的存储库来编辑文件的方法

我尝试了以下方法:

  • 在服务中查找XML的文件位置。(它说服务当前目录是windows/system32,因为它是作为服务运行的。现在有意义了。)
  • 将文件并排放在同一项目中。(同样的问题)
这已经起作用了:

  • 检索XML(硬编码路径:c)
  • 反序列化XML
  • 根据需要添加/删除到XML
  • 拯救

这个问题的关键是它必须位于API所在的位置。我认为我不太了解这种工作方式,我非常感谢您的帮助。

使用
System.Web.Hosting.HostingEnvironment.MapPath
查找文件相对于您的应用程序的路径,假设它是通过IIS托管的。

在ServiceStack中,您通常会使用来解析文件,例如:

base.VirtualFileSources.GetFile("path/to/file.xml").ReadAllText()
否则,如果您只需要路径,可以使用v4.5.4至中提供的
IAppHost.MapProjectPath()
,例如:


我得到了一个错误“这里不允许相对虚拟路径“../Project.API/OptionPresets.xml”。我应该传递什么路径到这里?不是它位于服务器右侧的静态路径?请尝试将其更改为
~/OptionPresets.xml
。它可以工作!但前提是它在同一个项目中。你知道我怎样才能升一级吗?System.Web.Hosting.HostingEnvironment.MapPath(“~../projset.API/OptionPresets.xml”);不起作用。找到此答案后,由于安全原因,在使用MapPath时无法在文件夹结构中升级。这是有道理的。如果您需要它,并且不关心安全性,我相信某种string.replace可以正常工作。虽然有点黑,“base”来自哪个名称空间?我没有提到它。至于HostContext.AppHost.MapProjectPath(“~/path/to/file.xml”),我无法使用,因为我需要使用稍旧一点的ServiceStack版本,因为需要授权。但是感谢您的输入。@BillyCostanza您可以在ServiceStack服务实现中使用base from,否则您可以从HostContext.VirtualFileSources访问它。我不认为VitualFileSources是ServiceStack 3.9.71的一部分,所以很遗憾,这不起作用,但是对于其他人来说,可能会这样。@BillyCostanza对于v3.9.71,您应该使用servicestack bsd标记,以明确您所指的是哪个版本。在v3中,VFS被称为VirtualPathProviderVirtualPathProvider has.OpenFile,这是一种读取文件而不是获取字符串路径的方法。仍然有用,但不完全是我想要的。下次我会记住标签的,谢谢。
HostContext.AppHost.MapProjectPath("~/path/to/file.xml")