我有一个非常简单的 MVC 4 应用程序,正在尝试将其部署到 Windows 2012 服务器。
不一致的是,当导航到 Web 应用程序的根目录(http://localhost/app
)时,它会返回403.14-Forbidden
:
详细错误信息:
Module: DirectoryListingModule
Notification: ExecuteRequestHandler
Handler: StaticFile
Error Code: 0x00000000
Requested URL: http://localhost:80/test1/
Physical Path: c:\apps\test1\
Logon Method: Negotiate
该 Web 应用程序是:
- 是一个非常原始的 VS2012 MVC4 内部网模板 - 仅对标签进行了调整以证明一切正常。
- 在集成的 v4.0 应用程序池中运行
- 设置为使用 Windows 身份验证
- 应用程序池已分配自定义 AD 标识(因此它可以访问 SQL 服务器)
- 应用程序池标识在其运行的 c:\apps\test1 文件夹中具有读取权限
- 它是一个 MVC4 应用程序,目前针对 .NET 4.0 -MVC4 应用程序中没有默认文档(如 default.aspx),因为不需要。
- 我不想启用目录列表(因为这不是真正的错误)。
- 已安装:角色 / Web 服务器 (IIS) / 应用程序开发 / (.NET 4.5 扩展性、应用程序初始化、ASP.NET 4.5、ISAP 扩展、ISAPI 过滤器、WebSocket 协议)
- 在 Windows 8 上的 IISExpress 中本地运行
- 已在web.config中配置:
<modules runAllManagedModulesForAllRequests="true" />
- 在发布期间设置为预编译
当我将预编译选项更改为时false
,Web 应用程序没有失败(至少在我的测试中,它似乎一直有效)。
我之所以说它不一致,是因为我曾经看到它能工作,然后我发布了,错误又出现了。我找不到问题的模式(而且现在,我根本无法让它再次工作)。
403 是从本地或远程 Web 浏览器返回的。
我一直在寻找不适用于旧版本 Windows 的解决方案(例如建议重新安装 ASP.NET,但它在 Windows 2012 上不起作用)。
我真的不知道还能尝试什么。
答案1
刚刚发现其中有“自定义 AD 标识”。
- 确保新用户确实有权读取文件系统路径,即使其中没有任何内容。
- 确保新用户位于 IIS 应用程序组中,以便它可以与元数据库通信
- 检查是否配置了内核模式身份验证,然后取决于:
- (如果是)检查 setspn 没有多余的记录
- (如果没有)请考虑在您的身份验证协商列表中将 NTLM 提升到 Kerberos 之上,看看是否能解决问题。
2012 还比较新,我不知道它的错误怪癖,但当出现 403 禁止时,这些都是很好的起点。
答案2
我有同样的问题。我搜索了很多时间,并按照这里的所有说明操作 关联。我已经像你一样设置了我的应用程序;但它根本不起作用。最后,我发现:当我在发布期间选择预编译时,我必须将 AssemblyCulture 设置为空字符串(在 Properties/AssemblyInfo.cs 文件中)例如:
[程序集:AssemblyCulture(“”)]
如果我按如下方式设置,它不起作用
[程序集:AssemblyCulture(“fr-FR”)]
答案3
我遇到了类似的问题,我的回答是这样的:
http://technet.microsoft.com/en-us/library/cc731598
我已添加访问该服务的机器的 IP。我不知道此功能已启用。