【问题标题】:Programmatically access the ~/Content directory?以编程方式访问 ~/Content 目录?
【发布时间】:2009-12-04 15:13:19
【问题描述】:

我怀疑我可能对这个问题的措辞有误(我已经有一段时间没有在 Microsoft 领域做过任何事情了),但还是这样吧。

本质上,我正在尝试以编程方式访问带有 ~/Content 目录的 XML 文档。我试图按照……的方式来做这件事。

XElement resourceConfigXML = XElement.Load(@"~/Content/resource_configuration.xml");

..但这显然是不正确的,因为字符串没有被转换成操作系统可以理解的路径。因此,是否有任何方法可以在运行时派生到该目录的物理路径?

顺便说一句,如果这是一个注定要失败的天真想法/对 Content 目录用途的可笑误解,请随时告诉我 - 在我的辩护中,我只是掌握了 .NET(MVC 风格谢天谢地)。

【问题讨论】:

  • 这是对 Content 目录的“怪诞”(你的话)误解。任何能猜出 url 的客户端都可以调用此文件。如果它包含用户不应该看到的信息,则尤其如此。如果是配置信息,请将其与带有 .config 扩展名的 web.config 一起放在根目录中(IIS 不允许客户端访问 .config 文件)。如果本质上是更多数据,则将其放在 APP_DATA 文件夹中,您可以保留 .xml - 客户端也无法访问此文件夹。使用用户应该访问的图像、css 和其他非 aspx 文件的内容。
  • @Michael - 感谢您的反馈 - 我很怀疑,因此非常感谢您的反馈。 App_Data 是。 :-)
  • 很好地解决了一个类似的问题:stackoverflow.com/questions/347528/…
  • @Mouffette 感谢您的提醒 - App Helper 路线看起来像是解决更普遍问题的巧妙解决方案,但很高兴知道。

标签: .net asp.net-mvc


【解决方案1】:

尝试使用Server.MapPath

XElement resourceConfigXML = XElement.Load(Server.MapPath(@"~/Content/resource_configuration.xml"));  

【讨论】:

    【解决方案2】:

    您想将其更改为:

    XElement.Load(Server.MapPath("~/Content/file.xml"))
    

    【讨论】:

      【解决方案3】:

      如果你想引用域而不是机器路径的另一种方式

      XElement.Load(VirtualPathUtility.ToAbsolute("~/Content/file.xml"));
      

      【讨论】:

        猜你喜欢
        • 2013-06-07
        • 1970-01-01
        • 2013-04-10
        • 2023-02-08
        • 2016-09-10
        • 2010-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多