MVC4 HTTP错误403.14-禁止


88

我已经构建了一个.net4.5 ASP.NET MVC4 Web应用程序,该应用程序在本地可以正常运行(IIS Express和开发服务器),但是一旦将其部署到我的Web服务器上,它将引发403错误。我已经在服务器上安装了.Net 4.5RC,甚至尝试了 aspnet_regiis -i 每个人都建议使用的MVC / .Net以前版本的问题,但是它没有帮助。

有任何想法吗?

编辑:有关情况的更多信息。该服务器是32位的,我还有其他4个运行良好的MVC3应用程序。只是我的MVC4应用无法正常工作。


当我创建一个新的asp.net 4.5 Web窗体应用程序时遇到了同样的问题。它在本地(IIS 7.5)上运行良好,但是当部署到测试服务器(也就是IIS 7.5)上时,大多数捆绑和缩小的javascript和css文件都无法通过404 Not Found加载。下面关于runAllManagedModulesForAllRequests的答案为我解决了这个问题!
2012年

我可能已经在以下位置回答了这个问题: stackoverflow.com/questions/24343788/…–
fsbf

<system.webServer> <modules runAllManagedModulesForAllRequests =“ true” /> </system.webServer>
Jinto John

Answers:


172

尝试

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

通过

/server/405395/unable-to-get-anything-except-403-from-a-net-4-5-website


1
有了它,一切都完成了,仍然只有MVC 4站点可以工作。要使此工作奏效,还必须有其他技巧。
Maxim V. Pavlov 2012年

1
这个。尝试了所有其他库存解决方案时都没有高兴,但这就是解决问题的方法。
朱莉娅·海沃德

1
亲爱的朋友,我做到了,但是没有用。确实,我使用的是MVC 4和VisualStudio 2012,直到昨天我的项目都可以正常运行,但是在我的代码进行了一些常规更改之后,默认页(home / index)中的此错误增加了。有人可以帮我吗?..
A.Dara 2014年

4
此修复程序不适用于此问题(请参阅Jason Koopmans答案中的链接)。更好的方法是在microsoft.com/en-us/download/…下
Ahmad Ibrahim 2014年

@AhmadIbrahim实际上是解决问题的方法。修复仅适用于64位,问题明确指出32位。对于某些配置,RAMMFAR是最可靠的工作解决方案,如果适当使用CDN,则可以增加最小的服务器负载。
MarkKGreenway 2014年

22

错误403.14是不允许显示目录内容的HTTP错误代码。请确保

  1. 您已将网站设置为IIS中的应用程序
  2. 您在服务器上安装了.NET 4.5
  3. 您已将应用程序池设置为运行正确版本的.NET框架(即未将其设置为.NET 2.0。
  4. 您正在应用程序池上使用集成管道
  5. .NET 4.5实际上是在IIS中注册的。请参阅此帖子以解决类似的问题/解决方案

通常,a和d是围绕MVC部署到IIS的最大问题


1.我尚未将网站设置为应用程序。2.我已安装.net 4.5,3.已将我的应用程序池定位到正确的框架。4.我的池设置为使用经典池,将其更改为集成池,但没有帮助。5.我很确定4.5已注册。
mithun_daa

1
@mithun_daa-如果您尚未将网站设置为应用程序,则非常简单->右键单击虚拟目录/网站并转换为应用程序(或添加应用程序,此刻术语使我无视)
Tommy 2012年

这是MVC4专用的东西吗?因为我从未将我的MVC3项目设置为“应用程序”,所以它们工作正常。
mithun_daa 2012年

可能是您当时的部署方式->但任何.NET Web应用程序都必须设置为IIS中的应用程序。但是,如果仅将它们放在默认网站下,则它将在默认网站应用程序下运行。确保正确配置了默认网站的应用程序池(.NET 4 /集成)。在IIS中创建虚拟目录/虚拟网站时,也可以选择将其设置为自己的应用程序。
汤米

我可能对您感到困惑,但是没有一个站点位于“默认”网站下。我右键单击IIS7中的“站点”,然后选择“添加网站”。那就是我一直在做的。
mithun_daa 2012年

11

也许...如果您碰巧使用了发布向导(像我一样)并选中了“发布时预编译”复选框(像我一样),并且看到了相同的症状...

是的,我打了个头,但是取消选中此框(看似无关的设置)后,描述的所有症状在重新部署后都消失了。

希望这可以解决一些问题。


如果您有此问题,则可能的根本原因是生产环境中具有不同版本的外部库。我有我的MVC应用程序编译针对第三方的dll和生产服务器的较新版本的旧版本..
ValGe

这是男孩的奇迹,孩子,奇迹的人,现象,势不可挡,国王,这是@Brian Kirkpatrick女士和先生们
Luis Villarroel19'02 /

10

Windows->开始->打开和关闭寡妇功能

确保您在中检查了必填选项

在此处输入图片说明


6

申请之前

runAllManagedModulesForAllRequests="true"/>

考虑下面的链接,该链接暗示了一种不太激烈的选择。在帖子中,作者对本地web.config提供了以下更改:

  <system.webServer>
    <modules>
    <remove name="UrlRoutingModule-4.0" />
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
    </modules>

http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html


这是真正的答案。谢谢!
Spivonious

5

Visual Studio 2012中有一个Refactor-> Rename Bug,它在RouteConfig.cs中的url参数的文字字符串错误地重命名了“ id” 。这在Windows Server 2012和Windows Server 2008 R2中的全新安装和正确安装上导致403.14。

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

改为

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{renamed_text}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

对于我来说,我很久以前,我可以进入发现nullname参数,以避免使一个名字为每路线。事实证明,这也导致403有时(仅在我们的督促环境,赢服务器2008 R2在VS2013项目运行.NET 4.5.1,MVC 5要解决我为每个路由添加一个名字。
tristankoffee

2

如果在开发服务器上进行测试时使用集成管道,然后将其作为经典管道模式安装在实时IIS 7.5 Web服务器上,并且我也缺少我的app_data文件夹,那么您也会得到403


2

如果您在Windows 8或Server 2012上运行IIS 8.5,则可能会发现在虚拟目录中无法运行mvc 4/5(.net 4.5)。如果您在主机文件中创建本地主机条目以指向本地计算机,然后将新的本地IIS网站指向该文件夹(带有匹配的主机头条目),则可以正常工作。


为什么要在多个地方发布相同的答案
devnull 2014年

8
因为我一直在寻找解决方案,所以它与两者有关。拯救某人免于狩猎。
Mastro 2014年

您不应该发布重复的答案。这就是我能说的。
devnull 2014年

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

你可以使用上面的代码


1

我已经将新应用程序的应用程序池设置为DefaultAppPoolIIS中的,这显然是在使用Classic管道.NET v.2.0

为了解决该问题,我使用Integrated管道和创建了一个新的应用程序池.NET v4.0。仅针对此新应用程序,然后一切都按预期开始工作。

不要忘记将这个新的应用程序池分配给应用程序。在IIS中选择应用程序,单击Basic Settings,然后为该应用程序选择新的应用程序池。


0

我最近经常看到的那个是IIS,它允许运行32位应用程序

这是您尝试过的吗?否则,我们需要有关生产和开发服务器版本的更多信息


对不起,但我没有遵循您的意思。这是一台32位服务器。我更新了我的帖子以添加更多信息。
mithun_daa

啊...他们在单独的app_pools中吗?
MarkKGreenway'7

是的,实际上我的每个网站都有自己的应用程序池。
mithun_daa 2012年

0

我有一个不同的问题,在服务器2012上,我不知何故忘记启用asp.net 4.5,因此,如果遇到此问题,请仔细检查一下是否启用了它。


0

我正在Azure和ASP.NET 4.5,IIS 8上运行Windows Server 2012 R2

我通过卸载“程序和功能”中的所有ASP.NET项目,然后使用“添加角色和功能”使用服务器管理器重新安装ASP.NET,从而解决了此问题:选择基于角色的安装或基于功能的安装,选择服务器,然后对于“选择服务器角色”,选择“ Web服务器(IIS)/ Web服务器/应用程序开发”,然后单击“ ASP.NET 4.5”,确认已安装必备软件,然后重新安装ASP.NET 4.5。

我以前的搜索使我相信该问题实际上源于ASP.NET的注册问题。在早期版本的ASP.NET中,实际上有一个实用程序可以运行而无需重新安装即可注册ASP.NET,但这似乎不再可用。


0

我解决了打开Visual Studio,扩展引用并将属性“ Copy Local”更改为“ True”的问题。

我发现这将旧版本的dll与我的新版本的dll进行了比较(这不起作用)


0

就我而言,我的应用程序的默认页面是index.html,默认文档选项中缺少该页面。添加它修复了403.14禁止错误。


0

在我的情况下,此问题是由自定义ActionFilterAttribute引起的,后者是一种全局过滤器属性。该属性通过Autofac实例化服务,但该服务在构造函数中崩溃:

public ActionFilterAttribute()
{
    _service = ContainerManager.Resolve<IService>();
}

public class Service: IService
{ 
    public Service()
    {
        throw new Exception('Oops!');
    }
}

0

就我而言,Windows功能和功能都aspnet_regiis -i没有。经过数小时的Internet挖掘,我制定了自己的解决方案:

  1. 在IIS管理器的“模块”中,我在UrlRoutingModule-4.0节点中将继承更改为本地:

    在此处输入图片说明

  2. 在web.config中,我从该论坛中粘贴了一些提示:

    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true">
            <remove name="UrlRoutingModule-4.0"></remove>
            <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition=""></add>
        </modules>
    </system.webServer>

希望能帮助到你

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.