|
|
1
18
这可能是模拟和不同身份验证方法不匹配的组合。
模仿 是一种“临时”切换运行线程的用户帐户的技术。本质上,线程短暂地获得了与被模拟的帐户相同的权限和访问权——不多也不少。一旦线程创建完网页,它就会“恢复”到原始帐户,并为下一次调用做好准备。此技术用于访问只有登录到您的网站的用户才能访问的资源。坚持一下这个概念。 现在,默认情况下,ASP.NET在名为 ASPNET . 同样,默认情况下,只有ASPNET帐户和Administrators组的成员才能写入该文件夹。您的临时文件夹在该帐户的权限范围内。这是拼图的第二块。
如果设置丢失或设置为false,您的代码将在上面提到的ASPNET帐户下执行。根据您的错误消息,我确信您的模拟为true。这没什么错!模仿的优点和缺点超出了本文的讨论范围。 还有一个问题:当你使用模拟时, ? 除非您在web.config中指定帐户( full syntax of the identity element here IUSR_ComputerName帐户是由IIS创建的低权限帐户。默认情况下,此帐户是运行web调用的帐户 总之,这就是发生在你身上的事情: 您的用户正在尝试访问该网站,但由于某种原因,IIS无法对此人进行身份验证。由于启用了匿名访问(或者您不会看到IUSRComputerName访问临时文件夹),IIS允许用户以普通用户的身份进入。您的ASP.NET代码运行并模拟此通用IUSR\uuuuuuu ComputerName“guest”帐户;只是现在代码没有权限访问ASPNET帐户可以访问的内容,包括它自己的临时文件夹。
为什么这个人会以“匿名/客人”的身份出现? 有两种可能的情况: a) 您打算使用IIS进行身份验证,但IIS中某些服务器的身份验证设置错误。
我已经多次使用过这个场景,坦率地说,放弃临时文件夹会让你少一些麻烦;在服务器中创建专用文件夹,设置适当的权限,并在web.config中设置其位置。 b) 您不想对人员进行身份验证,或者您想使用ASP.NET表单身份验证(它使用IIS的匿名访问绕过IIS中的检查,并让ASP.NET直接处理身份验证)
然后,您需要决定是关闭模拟,还是反过来在web.config中指定要模拟的帐户。如果您的web服务器不需要外部资源(如数据库),请首先执行此操作。如果您的网站确实需要在可以访问数据库(或其他外部资源)的帐户下运行,请执行后一种操作。 您还有两个选项可以指定要模拟的帐户。首先,您可以转到IIS并将“匿名”帐户更改为可以访问资源的帐户,而不是IIS为您管理的帐户。第二种方法是将加密的帐户和密码存储在注册表中。这一步有点复杂,也超出了本文讨论的范围。 祝你好运 |
|
|
2
2
|
|
|
3
2
|
|
|
4
0
你可以用 Path.GetTempPath() 找出它试图写入的目录。 |
|
5
0
我的一个ASP.Net应用程序也有同样的问题。我正在 Path.GetTempPath() 但它抛出了一个例外: 无法写入文件“C:\Windows\Temp\somefilename”,异常:对路径“C:\Windows\Temp\somefilename”的访问被拒绝 我在这一页上尝试了一些建议,但没有任何帮助。
|
|
|
Ali Jebali · ASP。网络核心力量使用Brotli 2 年前 |
|
|
Ahmad · 如何配置IIS以承载应用程序而不中断相对路径? 3 年前 |
|
|
Crust3 · IIS虚拟目录和内容范围标头 3 年前 |