没有App_Data的访问权限

本文关键字:访问 访问权 权限 Data App 没有 | 更新日期: 2023-09-27 18:26:38

我正在完成我的web项目,并添加了一些错误日志功能。它将异常的详细信息写入App_Data文件夹中的日期文件中。

当我在我的开发机器上这样做时,它就工作了。但是当我切换到IIS机器时,它停止工作,并且我得到一个UnauthorizedAccessException。

堆栈跟踪:

[UnauthorizedAccessException: Der Zugriff auf den Pfad "c:'inetpub'wwwroot'App_Data'Error_Logs'" wurde verweigert.]
   System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +9726526
   System.IO.Directory.InternalCreateDirectory(String fullPath, String path, Object dirSecurityObj) +9431442
   System.IO.Directory.CreateDirectory(String path) +146
   WerIstWo.Logger.writeToLog(String text) in c:'Users'Teichler'Dropbox'Praktikum'IHK-Projekt'WerIstWo'WerIstWo'Logger.cs:18
   WerIstWo.NeuerBenutzer.btnSpeichern_Click(Object sender, EventArgs e) in c:'Users'Teichler'Dropbox'Praktikum'IHK-Projekt'WerIstWo'WerIstWo'NeuerBenutzer.aspx.cs:325
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +112
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563

代码:

        public static void writeToLog( string text )
        {
            string date = DateTime.Today.ToShortDateString().ToString();
            string path = AppDomain.CurrentDomain.GetData( "DataDirectory" ).ToString() + "''Error_Logs''";
            if (!Directory.Exists( path ))
            {
                Directory.CreateDirectory( path );
            }
            string fullPath = path + date + ".txt";
            if (!File.Exists( path + date ))
            {
                File.Create( fullPath ).Close();
            }
            using (StreamWriter writer = new StreamWriter( fullPath, true ))
            {
                writer.Write( text );
            }
        }

在错误详细信息中,它告诉我需要为此文件夹设置IUSR_MachineName的权限,但我不确定这是否是个好主意,也不确定如何在IIS 5.1(我正在使用)中执行此操作。

没有App_Data的访问权限

这确实是您需要做的。在您的开发机器上,IIS(或IIS express)可执行文件对您的App_Data目录具有写入权限。在生产机器上,默认情况下通常不会。只有一种解决方案,即授予IUSR_MachineName用户对目录的写入权限。这并没有什么根本问题,只要你知道这意味着在同一IIS实例中运行的其他网站也可能写入该目录。