存在目录时Directory.Exists返回false:控制台正常ASP.NET项目异常
刚接触.NET遇到控制台和ASP.NET的行为差异确实挺困惑的,我给你列几个最有可能的原因,你可以一个个排查:
权限差异(最核心的原因):控制台应用是用你当前登录的Windows用户身份运行的,你对这个目录有访问权限自然能识别到;但ASP.NET应用(不管是IIS、IIS Express还是Kestrel)通常是用应用池身份或者特定服务账户运行的,这个账户很可能没有访问你指定目录的权限。你可以右键目标目录→属性→安全标签,检查有没有给ASP.NET对应的运行账户(比如IIS的
IIS AppPool\DefaultAppPool,或者Kestrel用的账户)添加读取和执行的权限。UAC(用户账户控制)拦截:如果你的Windows开启了UAC,ASP.NET应用的运行账户可能因为权限级别不够,无法访问用户目录下的内容(比如你路径里的
C:\Users\AndreasT\...属于个人用户目录,默认权限限制比较严)。可以尝试临时关闭UAC测试,或者给应用池账户提升权限(不建议长期这么做,最好还是给目录单独加权限)。路径拼写或解析小问题:虽然你写的是绝对路径,但还是可以再确认一遍代码里的路径和控制台里是不是完全一致——比如有没有少打反斜杠、多打字符?另外Windows不区分大小写,这个因素概率很低,但也可以排除一下。
IIS身份模拟设置影响:如果是用IIS部署的项目,检查一下站点的身份模拟是否开启。如果开启了身份模拟,ASP.NET会用访问者的身份去访问目录,而如果访问者是匿名用户,权限就会受限。可以在IIS管理器里找到你的站点→身份验证→匿名身份验证,查看对应的账户,然后给这个账户添加目录访问权限。
内容的提问来源于stack exchange,提问作者Andreas Tasoulas

