【问题标题】:MVC "Access is Denied" using IIS使用 IIS 的 MVC“访问被拒绝”
【发布时间】:2013-08-01 08:32:05
【问题描述】:

在超出“访问被拒绝”消息时遇到严重问题:

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

我是怎么到这里的

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

我的尝试

  1. 已将 XYZ 发布到文件系统位置“C:/websites/XYZ”。
  2. 将“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 项目的身份验证模式设置为“无”。
  9. 网站身份验证已启用匿名访问,其他所有功能均已禁用。
  10. 我还为该站点启用了目录浏览。

在这一切之后,我重置了网站,刷新了浏览器,并重置了 IIS。当我访问 abc.xyz.com 时,我仍然收到此消息。我完全不知道接下来我应该检查什么。

我需要什么

谁能帮我解决这个问题?我已经使用“mvc localhost access denied”等组合执行了几次 Google 搜索,并实施了我找到的建议。

【问题讨论】:

  • 忘了说通过 F5 执行应用程序就可以了。

标签: asp.net-mvc windows model-view-controller iis-7 authorization


【解决方案1】:

已修复

好的。找到了答案……至少对于这个应用程序。我将身份验证从 Windows 更改为匿名。然后,我删除了拒绝匿名访问的 .NET 授权规则。这两件事使您可以在没有伴随 Windows 授权的恼人 IIS 登录弹出窗口的情况下访问应用程序。

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

不幸的是,每次我发布我都会重置身份验证。这可能是我遇到这么多麻烦的真正原因。学过的知识。我很懊恼。

我未能弄清楚的另一件事是我使用的是 IIS 7.5。

【讨论】:

  • 遇到了类似的问题。把我的头发拉出来试图修复它。这篇文章让我走上了正确的道路。确保你的 web.config 中没有这个:授权>
  • 将 MVC 站点从 IISExpress 移动到 IIS 它给了我这个错误。在 IIS 中,它不会显示身份验证设置为 Windows,并且 web.config 拒绝未经身份验证的用户。奇怪的是,在 IIS 中重新应用正确的身份验证设置后,它起作用了。
【解决方案2】:

将此添加到 web.config 文件中。

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <!-- rest of config -->
</system.webServer>

希望这会有所帮助。 :)

【讨论】:

  • 这是一个建议还是经过验证的解决方案?在回答问题时,最好给出一个来自实际经验的答案。在阅读了此配置选项的文档后,在我看来,它与问题中的问题无关。
【解决方案3】:

如果您想避免复制错误文件之类的事情:

  • 在这种情况下使用发布配置文件和转换:

我的开发箱:

<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。当我有一些空闲时间(LOL)时,我可能会在那个版本上测试这个实验,但是当前的应用程序运行得很好。
【解决方案4】:

创建 MVC 应用程序时,一种选择是创建“Intranet”应用程序。这将默认在Web.config 中打开“Windows”身份验证。

将此类项目发布到 IIS 时,您需要在 IIS 管理控制台中为您的应用程序启用 Windows 身份验证。您可能还必须禁用匿名身份验证。

【讨论】:

  • 对此进行了跟进。完全删除了应用程序,但保留了网站。在同一位置创建了一个具有相同名称的新应用程序。确保它是一个“Intranet”应用程序。同样的问题。我以为我最初选择了“Intranet”解决方案,但我必须确定。
  • 您是否在 IIS 管理控制台中启用了 Windows 身份验证?
  • 是的,它打开了 IIS 登录窗口,这是我不想要的,因为规范要求以不同的方式进行授权。我们有一个自定义的包含授权框架,该框架需要在任何其他授权方案之外运行。
  • 正如您在回答中提到的,这是问题的根源。您的 web.config 说要使用 Windows 身份验证,但您正在抑制网站使用它的能力。
【解决方案5】:

我收到错误是因为 web.config 的这行

https://www.asp.net/visual-studio/overview/2013/using-browser-link

<appsettings>
    <add key="vs:EnableBrowserLink" value="false"></add>
</appsettings>
<system.web>
  <compilation debug="false" targetFramework="4.5" />
</system.web>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多