服务器文件目录名称无效,Path.GetTempFileName - 目录名称无效

这可能是模拟和发生不同身份验证方法不匹配的组合。

有很多件;我会试着一个接一个地过去。

冒充是一种技术,用于“临时”切换线程正在运行的用户帐户。从本质上讲,该线程短暂地获得相同的权利和访问权限 - 不多也不少于作为被模拟的帐户。只要线程完成创建网页,它就会“恢复”回原始帐户,并为下一次呼叫做好准备。此技术用于访问只有登录到您的网站的用户才有权访问的资源。坚持一分钟的概念。

现在,默认情况下,ASP.NET在本地帐户下运行一个名为ASPNET的网站。同样,默认情况下,只有ASPNET帐户和Administrators组的成员可以写入该文件夹。您的临时文件夹在该帐户的权限范围内。这是谜题的第二部分。

冒充不会自行发生。它需要在你的web.config中有意打开。

如果设置丢失或设置为false,那么您的代码将在上述ASPNET帐户下执行纯粹且简单的操作。鉴于你的错误信息,我确信你有模拟=真实。没有什么不妥!假冒的优点和缺点超出了这个讨论范围。

还有一个问题:当你使用模拟,哪个帐号被冒充?

除非您在web.config(full syntax of the identity element here)中指定帐户,否则模拟的帐户是IIS交给ASP.NET的帐户。这取决于用户如何验证(或不验证)到网站中。这是你的第三件也是最后一件。

IUSR_ComputerName帐户是由IIS创建的低权限帐户。默认情况下,如果用户无法通过验证,则此帐户是网络电话运行的帐户。也就是说,用户以“匿名”的身份进入。

总之,这是发生了什么事给你:

您的用户试图访问该网站,和IIS无法验证某些原因的人。由于匿名访问为ON(或者您不会看到IUSRComputerName访问临时文件夹),因此IIS允许用户以任何方式访问,但是以普通用户身份访问。您的ASP.NET代码将运行并模拟此通用IUSR___计算机名“guest”帐户;只有现在,代码才能访问ASPNET帐户有权访问的内容,包括其自己的临时文件夹。

授予IUSR_ComputerName WRITE对文件夹的访问权使您的症状消失。

但这只是症状。您需要查看为什么这个人会以“匿名/访客”的身份来访问?

有两种可能的情况:

一)你打算使用IIS进行身份验证,但IIS身份验证设置为你的一些服务器是错误的。

在这种情况下,您需要禁用这些服务器上的匿名访问权限,以便执行通常的身份验证机制。请注意,您可能仍然需要授予您的用户对该临时文件夹的访问权限,或者使用其他文件夹,而不是您的用户已有权访问的文件夹。

我已经多次与这个场景合作过了,坦率地说,它让你减少了放置Temp文件夹的麻烦;在服务器中创建一个专用文件夹,设置适当的权限,并在web.config中设置其位置。

b)你并不想反正认证的人,或者你想使用ASP.NET窗体身份验证(使用IIS的匿名访问绕过检查在IIS和ASP.NET可以直接处理认证)

这种情况有点复杂。

您应该转到IIS并禁用“匿名访问”以外的所有形式的身份验证。请注意,您不能在开发人员的方框中执行此操作,因为调试器需要启用集成身份验证。所以你的调试盒会比真实的服务器表现得有点不同;请注意这一点。

然后,您需要决定是关闭模拟还是反过来指定要在web.config中模拟的帐户。如果您的Web服务器不需要外部资源(如数据库),请首先执行操作。如果您的网站确实需要在可访问数据库(或其他外部资源)的帐户下运行,请执行后者。

您有另外两种替代方法来指定要模拟的帐户。一,你可以去IIS并将“匿名”帐户改为可以访问资源的帐户,而不是IIS管理的帐户。第二种选择是隐藏在注册表中加密的帐户和密码。这一步有点复杂,也超出了本次讨论的范围。

祝你好运!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值