MVC在IIS中出现“访问被拒绝”的问题

12

遇到了严重的“拒绝访问”消息问题:

错误消息401.2:未经授权:由于服务器配置,登录失败。请根据提供的凭据和Web服务器上启用的身份验证方法以及您所提供的凭据基于的权限来验证您是否有权查看此目录或页面。联系Web服务器管理员获取其他帮助。

如何进入这个状态

在 Windows 7 Professional下运行。系统使用AD进行系统登录(名称:SYSTEM\login)。在VS2010中创建了一个名为 XYZ 的新MVC 3应用程序。没有更改代码。将 System.Web.mvc 和 System.Web.Helpers 的引用文件设置为 Copy to Local = true。

我尝试了什么

  1. 将 XYZ 发布到文件系统位置"C:/websites/XYZ"。
  2. 在 hosts 文件中添加了 "abc.xyz.com",并将IPA 127.0.0.1关联。
  3. 在 IIS 管理器中创建了新站点,命名为 "XYZ" 并将物理路径设置为应用程序发布的路径(C:/websites/XYZ)。
  4. 将 XYZ 绑定到 abc.xyz.com:80。
  5. 确保网站的应用程序池运行 .NET 4.0,集成模式。
  6. 应用程序池标识设置为ApplicationPoolIdentity。
  7. 在已发布文件的物理位置,右键单击文件夹,转到“属性”->“安全性”,将 IUSR 添加到用户列表中,并为其提供完全控制。
  8. MVC 项目的身份验证模式设置为 "None"。
  9. 启用网站的匿名访问权限,关闭其他所有访问权限。
  10. 还启用了站点的目录浏览。

完成所有这些操作后,我重置了网站,刷新了浏览器,并重置了IIS。但是,当我打开 abc.xyz.com 时,仍然会显示此消息。我绝对不知道我应该检查什么。

我需要什么

有人能帮帮我吗?我进行了几个谷歌搜索,包括“mvc本地主机访问被拒绝”等组合词汇,并且我实施了我发现的建议。


忘了提到通过 F5 执行应用程序完全正常。 - James Jensen
5个回答

11

问题已解决

好的,我找到了答案......至少是对于这个应用程序。 我将身份验证从Windows更改为匿名。 然后,我删除了.NET授权规则,该规则拒绝匿名访问。 这两件事使得可以访问应用程序,而不需要伴随Windows授权的烦人的IIS登录弹窗。

之前我没有注意到的一件事是,我对网站所做的更改在发布位置的web.config文件中反映出来,而不是源代码中。

不幸的是,每次我发布时都会重置身份验证。 这可能是我遇到如此多麻烦的真正原因。 吸取了教训,我感到很羞愧。

还有一件我没有澄清的事情是,我使用的是IIS 7.5。


8
遇到了类似的问题,为了解决它我很苦恼。这篇文章让我找到了正确的解决方法。请确保您的 web.config 文件中没有以下内容: <authorization> <deny users="?" /> </authorization> - Koen Zomers
将一个MVC网站从IISExpress迁移到IIS时,出现了这个错误。在IIS中,它不会显示身份验证设置为Windows,以及web.config拒绝未经身份验证的用户。很奇怪,但是在IIS中重新应用正确的身份验证设置后,它就可以工作了。 - hacker

1
在web.config文件中添加以下内容。
<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <!-- rest of config -->
</system.webServer>

希望这能有所帮助。 :)

这是一个建议还是经过验证的解决方案?回答问题最好给出来自实际经验的答案。在阅读此配置选项的文档后,我认为它与问题无关。 - keenthinker

1

如果您想避免类似错误的文件复制:

  • 使用发布配置文件和转换,例如:

我的开发机:

<authentication mode="None" xdt:Transform="Replace"/>
  <authorization xdt:Transform="Replace">
  </authorization>

生产:

<authentication mode="Windows" xdt:Transform="Replace"/>
<authorization xdt:Transform="Replace">
  <deny users="?" />

user5635311:感谢您的回复。不幸的是,因为我提出这个问题已经超过两年了,我已经转向使用VS 2013。当我有一些空闲时间(哈哈)时,我可能会在那个版本上测试这个实验,但目前的应用程序运行得非常好。 - James Jensen

0

0
在创建MVC应用程序时,一个选项是创建一个“内部网”应用程序。这将默认在Web.config中启用“Windows”身份验证。
当将这样的项目发布到IIS时,您需要在IIS管理控制台中为您的应用程序启用Windows身份验证。您还可能需要禁用匿名身份验证。

跟进了这个问题。完全删除了应用程序,但保留了网站。在同一位置创建了一个同名的新应用程序。确保它是一个“内部网络”应用程序。仍然存在相同的问题。我原本以为我最初选择了“内部网络”解决方案,但我必须确定一下。 - James Jensen
您是否在IIS管理控制台中启用了Windows身份验证? - Matt Houser
是的,它弹出了IIS登录窗口,但我不想要这个,因为规格要求授权以不同的方式进行。我们有一个自定义的包含授权框架,需要在任何其他授权方案之外运行。 - James Jensen
正如你在回答中提到的,这是问题的根源。你的web.config文件要求使用Windows认证,但是你却限制了网站使用它。 - Matt Houser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接