403禁止访问错误在发布ASP.NET MVC后出现

28

虽然这个问题已经有几次回答了,但是没有一个解决方案适用于我。我发布了我的ASP.NET MVC 3应用程序(只是互联网模板,没有做任何更改),以查看是否可以在公共环境下运行。但是,当我访问该站点时,会显示403错误。作为一名来自PHP / Linux背景的开发人员,我感到困惑,也不知道该去哪里寻找帮助。我学习.NET才8-9个月,并且之前所有的测试都是在VS2010的本地开发服务器上进行的。它几乎看起来像服务器不知道它应该是MVC应用程序,或者我需要更改我的路由设置。

无论如何,我检查了服务器设置确保使用的是.NET 4版本。任何帮助都将不胜感激。

此外,它是使用arvixe的共享托管环境。

7个回答

56

对我来说,这很管用。(原回答者MmerrellIIS 7.0 / Windows Server 2008上为ASP.NET MVC 3应用程序获取404.0错误时的解决方案

你实际上提醒了我需要在这里的环境中修复此问题。如果您的情况与我的相同,则可以轻松解决。

只需将以下内容添加到Web配置文件中:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 

确保您选择了“ASP.Net 4.0”应用程序池,而不是为您的应用程序创建的应用程序池。 确保您的应用程序池使用“ApplicationPoolIdentity”,而不是NetworkService。从根文件夹中删除NetworkService权限。您不需要它。IIS有一个内置标识(IIS_IUSRS)。


2
<modules runAllManagedModulesForAllRequests="true" />已经修复了。这可花费了我不少时间去查找。非常感谢您的帮助。 - Jonesopolis
2
我不知道为什么PO接受了Jupaol的答案,而且有这么多评论,而这个答案却能快速解决问题。谢谢。 - Tien Do
2
如果可以的话,我会给你加上一百万。经过两个小时的研究,这解决了我的问题。无法感谢你! - Ed Gibbs
关于“确保您选择了“ASP.NET 4.0”应用程序池——这在哪里设置?” - David Mays

4

403是一个禁止错误。请检查您部署的文件夹的NTFS权限,确保Network Service用户具有读取权限。

enter image description here

此外,请检查IIS应用程序中的身份验证和授权机制:

enter image description here

编辑:

.Net授权规则

enter image description here


wwwroot是指在IIS中创建一个应用程序以执行ASP.Net应用程序。一旦创建完成,您需要部署所有所需的文件(页面、资源、dll等)。请按照以下文章进行操作:http://msdn.microsoft.com/en-us/library/ha2y9493.aspx - Jupaol
我给NTFS添加了READ(它没有被勾选,所以我有一线希望),但那也没起作用。 - Anonymous
我没有访问IIS设置的权限,因为这是一个共享环境。我只有“WebsitePanel”。 - Anonymous
您发布ASP.Net应用程序的根文件夹中是否包含您要发布的图像?如果是这种情况,那么身份验证就没有问题,只需尝试在根目录下添加一个名为default.aspx的文件,或者仅作为实验,启用目录浏览(选项在您发布的第一张截图中)。 - Jupaol
http://qbressler.com/现在只显示一个空白页面:(但至少没有403:) - Anonymous
显示剩余14条评论

4

我在使用FTP发布将MVC 4网站发布到远程服务器后,也遇到了这个问题。最终解决方法是在通过Visual Studio进行发布后,在远程服务器上登陆IIS,找到发布的目录 -> 右键 -> 转换为应用程序。

如果你没有访问服务器的权限,是否有一种在web.config/属性中指定此功能的方法呢?


3

1- 确认您的应用程序正在.NET 4.0下运行(您已经这样做了)

2- 与托管公司检查其托管计划是否支持MVC 3框架。

3- (works) Bin-Deploy您的MVC运行时库,以便您可以克服服务器上的任何要求。

更多有关bin-deploy ASP.NET MVC的信息,请访问此处:http://haacked.com/archive/2011/05/25/bin-deploying-asp-net-mvc-3.aspx

4- 检查“网络服务”是否具有对您的文件夹的适当访问权限。基本上应该具有“读取”权限。


2
不要忘记 aspnet_regiis.exe -ir

如果您正在使用Windows Server 2008,则可能会解决此问题。程序集的默认路径为:C:\Windows\Microsoft.NET\Framework64\v4.0.30319。如果您正在使用Server 2012,则需要查看服务器角色而不是此命令。 - Ralph

1
<handlers>
  <add name="rewrite" path="*" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
</handlers>

请向您的托管提供商请求将这些处理程序添加到webconfig中


0

尝试将应用程序池的托管管道模式更改为“经典”而不是“集成”。虽然这可能不是您想要的最终结果(使用集成模式确实有真正的优势),但至少它会指引您朝着正确的方向前进……如果它起作用的话。


这个建议的相反方案解决了我的问题。我不得不将“.NET v4.5”应用程序池更改为集成模式,以修复我发布的MVC应用程序。 - rg89

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