90

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

有任何想法吗?

编辑:有关情况的更多信息。服务器是 32 位的,我还有 4 个其他 MVC3 应用程序可以正常工作。只是我的 MVC4 应用程序不工作。

4

18 回答 18

172

尝试

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

通过

https://serverfault.com/questions/405395/unable-to-get-anything-except-403-from-a-net-4-5-website

于 2012-07-11T15:07:02.100 回答
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 的最大问题

于 2012-07-11T13:13:35.063 回答
11

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

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

希望这可以解决一些人。

于 2014-04-09T18:48:58.343 回答
10

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

确保您检查了所需的选项

在此处输入图像描述

于 2016-11-29T00:26:39.003 回答
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

于 2014-02-13T17:51:45.763 回答
5

Visual Studio 2012 中有一个重构 --> 重命名错误,它错误地重命名了我的 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 }
);
于 2013-12-18T16:47:14.183 回答
2

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

于 2014-04-29T02:21:07.827 回答
2

如果在使用开发服务器进行测试时使用集成管道,然后在您的实时 IIS 7.5 Web 服务器上安装为经典管道模式,您也可以获得 403,我也缺少我的 app_data 文件夹,这也是必需的

于 2014-07-23T18:54:10.397 回答
1
<system.webServer>
   <modules runAllManagedModulesForAllRequests="true"/> 
 </system.webServer>

你可以使用上面的代码

于 2015-04-09T14:42:19.337 回答
1

我已将新应用程序的应用程序池设置为DefaultAppPoolIIS 中的应用程序池,显然它正在使用Classic带有.NET v.2.0.

为了解决这个问题,我使用Integrated管道和.NET v4.0. 只是为了这个新的应用程序,然后一切都开始按预期工作。

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

于 2015-04-15T13:32:17.350 回答
0

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

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

于 2012-07-11T05:52:18.410 回答
0

我有一点不同的问题,在服务器 2012 上,不知何故我忘了启用 asp.net 4.5,所以如果你有这个问题,请仔细检查你是否启用了它。

于 2013-03-04T23:27:06.293 回答
0

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

我通过卸载程序和功能中的所有 ASP.NET 项目解决了这个问题,然后使用服务器管理器使用添加角色和功能重新安装 ASP.NET:选择基于角色或基于功能的安装,选择我的服务器,然后对于 Select Server Role 选择 Web Server (IIS)/Web Server/Application Development,然后单击 ASP.NET 4.5,确认安装了先决条件,然后重新安装 ASP.NET 4.5。

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

于 2014-06-27T16:10:54.843 回答
0

我解决了打开视觉工作室、扩展引用并将属性“复制本地”更改为“真”的问题。

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

于 2015-05-21T19:51:27.323 回答
0

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

于 2016-04-18T15:22:36.237 回答
0

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

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

public class Service: IService
{ 
    public Service()
    {
        throw new Exception('Oops!');
    }
}
于 2016-08-30T12:27:41.500 回答
0

在我的情况下,Windows 功能都aspnet_regiis -i没有完成这项工作。经过数小时的互联网挖掘,我提出了自己的解决方案:

  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>
    

希望能帮助到你

于 2017-10-13T06:54:36.110 回答
0

要么我无意中将我的应用程序池 .NET CLR 版本更改为:无托管代码,要么当我为部署在同一台服务器上的新 .NET 5 Web 应用程序更改应用程序池时,它被更改了。

将我的应用程序池 .NET CLR 版本更改回:.NET CLR 版本 v4.0.30319 解决了该问题。

于 2021-08-26T18:03:03.753 回答