HTTP 403 Forbidden:拒绝访问 ASP.NET Web API。

13
在我们的生产服务器上运行ASP.NET Web API项目时,出现以下错误:
403 - 禁止访问:拒绝访问。您使用提供的凭据没有权限查看此目录或页面。
查看IIS 7.0错误日志,底层错误是:
403.14 - 拒绝目录清单。
我已经配置了生产服务器,使其具有与工作的临时服务器相同的设置。身份验证、模块、授权、权限等都是相同的。
在这篇帖子中,根据建议403 - Forbidden: Access is denied. ASP.Net MVC,通过在web.config文件中添加runAllManagedModulesForAllRequests="true"来解决问题。
<modules runAllManagedModulesForAllRequests="true">
虽然这样做可以解决问题,但我并不认为这是长期解决方案,因为它会在服务器上造成不必要的负载。
因此,似乎表明某些应该被加载的东西没有被加载。

你检查过 UrlRoutingModule 是否已安装了吗? - Phil Cooper
是的,已经安装了。 - DomBurf
7个回答

3

在我的情况下,有人在RouteConfig中删除了默认的Asp Net MVC Home/Index路由。

将此代码放回RegisterRoutes方法中的RouteConfig.cs中后,问题就消失了。

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

1
当您没有访问文件夹/web.config文件的权限时,将弹出上述错误。
请尝试以下操作:
  1. 在Windows资源管理器中定位与应用程序相关联的web.config文件。
  2. 右键单击web.config文件。
  3. 单击属性。
  4. 单击安全选项卡,然后单击编辑。
  5. 单击添加。
  6. 在“输入要选择的对象名称”框中,输入IUSR,单击检查名称,然后单击确定。
  7. 提供完全控制权限,然后单击确定。
  8. 在Web.config属性对话框中,单击确定。
我认为它应该会起作用。

当我最初配置应用程序时,我已经授予了该用户完全的权限。 - DomBurf
这是问题所在。它是一个Web API(MVC)应用程序,因此默认文档通过URL路由加载,这就是我怀疑问题与权限无关而与未加载负责此事的程序集/模块有关的原因。此外,当我在web.config中设置<modules runAllManagedModulesForAllRequests="true">时,问题消失了,从而证实了我的怀疑。 - DomBurf

1
如果有人需要帮助,我的问题是我的发布选项设置为“允许预编译站点可更新”,并且我在部署的API中缺少文件“PrecompiledApp.config”。

0

最近在配置我的iis(https)网站时遇到了同样的问题。在我的情况下,我尝试了几种解决方案,例如:

  1. 文件夹安全和访问权限,我甚至给了IIS_USER访问权限,测试时也给了所有人访问权限,还更改了IIS权限,但没有运气。
  2. 启用“目录浏览”,但没有运气
  3. 启用“匿名身份验证”,但没有运气
  4. 重新安装https SSL证书,因为使用https,但没有运气

经过多次尝试,最后我找到了答案!!!

这是一个非常微小的问题,我在发布我的网站/API时选择了“发布期间预编译”,当我取消选中此选项时,一切都变得正常并开始正常工作。不确定发生这种情况的实际原因,但要解决此问题,您可以尝试如下图所示的方法(visual studio 2019):

enter image description here


0

在将应用程序部署到生产环境时,您可以采用以下方法。

  1. 以发布模式发布应用程序。
  2. 将应用程序放置在inetpub -- wwwroot文件夹中,因为该文件夹具有管理员权限。

希望它能正常运行。


不幸的是,那并没有起作用。尽管有错误消息,但我并不认为问题与权限有关。我怀疑它正在尝试加载默认页面,但由于需要的模块未被加载而在路由中出现了错误。当然,我也可能是错的。 - DomBurf

0

我的具体情况是,我使用了基本身份验证,在 API 控制器中的授权装饰器中,角色与我提供的身份验证用户的角色不匹配。 例如:[Authorize(AuthenticationSchemes =BasicAuthenticationHandler.SchemeName , Roles = "Tester") ]


这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要求问者澄清的答案。- 来自审核 - João Dias

-1

我们错过了部署配置,与应用程序相关联的应用程序池不存在。我创建了一个同名的应用程序池,这个错误就消失了。


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