【问题标题】:Accessing file in App_Data from a class in the App_Code folder从 App_Code 文件夹中的类访问 App_Data 中的文件
【发布时间】:2012-02-17 02:25:11
【问题描述】:

在 ASP.Net 中有 app_data 文件夹,用户无法通过 Web 访问该文件夹。我想在这个文件夹中存储一个文件,并使用 App_Code 文件夹中的一个类从这个文件中读取。

请记住,这里的当前工作目录将是“c:\”、“c:\windows\system32\”等目录,而不是应用程序目录。所以像“../App_Data/somefile”这样的东西不起作用。

关于如何以编程方式访问 App_Data 文件夹中的文件,我忽略了一些简单的事情

我该怎么做?

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    您可以像这样访问 App_Data 文件夹:

    string appdatafolder = Path.Combine(HttpContext.Current.Request.PhysicalApplicationPath, "App_Data");
    

    我知道这使用了 HttpContext 对象,但是,如果您在自定义 ASP.NET Membership 提供程序中编写此代码(我自己做过很多次),那么使用 HttpContext 应该没有问题对象。

    【讨论】:

    • 谢谢,这让我有了正确的开始,我选择了 HttpContext.Current.Server.MapPath("~/App_Data/myfilenamehere") 方法,因为它看起来更具可读性。
    • @Brian - 很高兴你能正常运行。不过,请参阅此链接,了解 MapPath 与 PhysicalApplicationPath 的性能:dotnetperls.com/Content/PhysicalApplicationPath.aspx 如果只是偶尔访问可能不是问题,但很高兴了解性能差异。
    【解决方案2】:

    您说您无权访问上下文对象,但不清楚为什么会这样。

    如果您的代码响应请求而运行,那么您可以通过以下方式访问上下文:-

    HttpContext.Current
    

    您无法使用以下方式访问应用程序的根物理路径:-

    HttpRuntime.AppDomainAppPath
    

    【讨论】:

    • 我的课程在数据层中,没有对 web 和 mvc 库的引用。这个数据类还能用 App_Data 吗? HttpRuntime 和 HttpContext 都使这个持久性类知道 Web 部署。谢谢
    • @one.beat.consumer:是的,虽然我认为你确实回答了你自己的问题。
    • 不是真的,我只是问得很糟糕 - 更清楚的是,我的存储库类如何在不引用 System.Web 或任何其他 Web 库的情况下写入 App_Data 文件夹?还有其他方法可以找到这个文件夹吗?
    • 关注点分离。我更喜欢我的数据持久性服务对前端一无所知。例如,我希望能够将这些存储库作为类库提取出来以供重用。
    • @one.beat.consumer:那么您能做的最好的事情就是发明一些接口,您的库可以通过该接口获取文件夹路径。您仍然需要编写此接口的至少一个实现,该实现具有托管在网站中的特定知识,并且您仍然需要为您的存储库代码提供此接口的实现。 .NET 没有超通用的内置功能来实现您想要的。
    猜你喜欢
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    相关资源
    最近更新 更多