代码之家  ›  专栏  ›  技术社区  ›  Omar

中等信任文件I/O权限

  •  5
  • Omar  · 技术社区  · 14 年前

    MSDN article about medium trust ,中等信任:

    FileIOPermission受到限制。这个 意味着您只能访问 等级制度。你的申请被批准了 读、写、附加和路径发现 应用程序的权限 虚拟目录层次结构。

    但是,对于我当前的宿主提供程序,它在中等信任下运行应用程序,并且当我尝试在应用程序的根文件夹中读/写文件时,会得到一个 access to path 'myfile.xml' denied 错误。

    使用以下代码位读取此文件

    XElement file = XElement.Load(HttpContext.Current.Server.MapPath("~/myfile.xml"));
    

    更新完全错误:

    访问路径 否认。

    描述:未处理的异常 当前web请求。请检查 错误及其来源

    异常详细信息: 访问路径 “C:\WebSites\mywebsite\myfile.xml”是 否认。

    ASP.NET无权访问 请求的资源。考虑 到ASP.NET请求标识。 (通常是IIS 5上的{MACHINE}\ASPNET) 或IIS 6和IIS 7上的网络服务, 以及配置的应用程序池 在以下情况下使用的 应用程序未模拟。 通过, 身份将是匿名的 用户(通常是IUSR\u MACHINENAME)或 已验证的请求用户。

    要授予ASP.NET对文件的访问权限, 选择“属性”并选择 安全选项卡。单击“添加”添加 适当的用户或组。突出 ASP.NET帐户,并检查 用于所需访问的框。

    在电流执行过程中 例外的起源和位置 可以使用异常来识别 下面是堆栈跟踪。

    [UnauthorizedAccessException:访问 通往小路
    System.IO.\u错误.WinIOError(Int32 错误代码,字符串maybeFullPath) +12892935 System.IO.FileStream.Init(字符串路径, 文件模式,文件访问, Int32权限,布尔用户权限, 文件共享,Int32 bufferSize, 文件选项, msgPath,Boolean bFromProxy,Boolean
    System.IO.FileStream..ctor(字符串 访问、文件共享、Int32 缓冲区大小,文件选项, +229 System.IO.FileStream..ctor(字符串 访问,文件共享)+102
    System.Xml.XmlWriterSettings.CreateWriter(字符串
    文件名,保存选项)+108
    mesoBoard.Services.SiteConfig.UpdateCache() +1971 mesoBoard.Web.mvcapapplication.OnApplicationStarted() +604

    [HttpException(0x80004005):访问 这条路 “C:\WebSites\mywebsite\myfile.xml”是
    System.Web.HttpApplicationFactory.instareStartCalledForIntegratedMode(HttpContext 上下文,HttpApplication app)+3985477 System.Web.HttpApplication.registereventsubscriptionswithis(IntPtr)
    appContext、HttpContext)+325 System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr) appContext、HttpContext)+407 System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr)

    [HttpException(0x80004005):访问 “C:\WebSites\mywebsite\myfile.xml”是 拒绝。]
    上下文)+11524352
    System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext 上下文)+141
    System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest)

    5 回复  |  直到 14 年前
        1
  •  1
  •   Chase Florell    14 年前

    您需要确保运行网站的应用程序池的用户帐户对文件/文件夹具有读/写权限。默认情况下,我认为您应该具有读取权限,但不应具有写入权限。另外,出于安全原因,最好将该文件从wwwroot文件夹移到不会损坏整个应用程序的文件夹中。

    webdir/数据
    webdir/数据/ myfile.xml文件


    webdir/wwwroot/default.aspx

        2
  •  0
  •   Community Egal    7 年前

    你的IO权限听起来好像只是文件的权限问题。我知道,每当我上传一个文件到我的主机提供商,我必须登录到他们的控制面板,并手动赋予IIS帐户对它的写访问权限,因为读访问权限是唯一自动授予的权限。

    What is the App_Data folder used for in Visual Studio?

        3
  •  0
  •   Syd    14 年前
        4
  •  0
  •   user1161391    10 年前

    Medium Trust指定应用程序只能访问$AppDir。您可以通过更改FileIOPermission以包含除$AppDir以外的其他目录,自定义介质信任级别以添加对介质信任的附加访问。但是,我发现,即使在自定义的中等信任级别下调用Server.MapPath(“/”),也会出现异常“请求'System.Security.Permissions.FileIOPermission,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089'类型的权限失败”

    我的理论是,这是因为您正在请求访问$AppDir“文件系统之外的文件系统。我们最终不得不从web应用程序中删除对Server.MapPath()的所有调用。

        5
  •  -1
  •   Matthew Dresser    14 年前

    我在GoDaddy上建立了一个网站,发现启用写访问权限的唯一方法就是为 整个web根目录