【问题标题】:ASP.NET WEB API 2 Works Locally But Not On Production Web ServerASP.NET WEB API 2 在本地工作,但不能在生产 Web 服务器上工作
【发布时间】:2014-06-19 17:58:32
【问题描述】:

我开发了一个新的 WEB API 2,它在本地运行良好,但是当我将相同的代码上传到我的生产服务器(在本例中为 Arvixe)时,我调用它时得到的只是 404。我花了 HOURS 搜索网络,阅读论坛等。并且找不到任何解决方案,所以我在这里问作为我最后的努力。

我目前仅使用在 Visual Studio 中执行 New Project > ASP.NET Web API 2 Empty Project 时创建的默认项目进行测试。这将创建一个带有单个 ValuesController 的空项目。您应该能够通过调用/api/values 来响应 JSON,但这甚至不起作用。

我正在使用 Fiddler 在本地和 Web 服务器上测试 API。

http://localhost:1993/api/values    <--- works great

但是

http://api.mydomain.com/api/values   <--- returns 404

注意:在这种情况下,我创建了一个子域“api”,但 API 代码的所有内容与创建时相比没有变化。

为什么这在本地工作,但不能在生产网络服务器上工作?

【问题讨论】:

  • 检查所有 dll 是否已部署,并且该站点是否设置为 .NET 4.5.1 应用程序池中的应用程序。
  • 所有的 DLL 都在那里,它在 ASP.NET 4.0 Integrated 下运行,但 .NET 4.5.1 已安装并在服务器上运行。老实说,我看不出有什么理由不应该这样做。
  • 你的应用程序的根目录呢?是否在远程服务器上显示默认页面?
  • 你有想过这个吗?我遇到了完全相同的问题。
  • 汤姆,是的,我确实弄明白了。它最终成为服务器端问题,无法通过 IIS 正确配置。使用 Arvixe,我必须将 api.mydomain.com 创建为自己的网站,以使其正常运行。我不确定您的环境是否会出现这种情况,但值得一试。

标签: asp.net asp.net-mvc asp.net-web-api asp.net-web-api2


【解决方案1】:

服务器返回 404(未找到)可能表明很多事情。但是,您可以使用以下步骤进行检查:

  1. 将像 readme.txt 这样的简单文本文档添加到您的文件夹子域 http://api.mydomain.com,并尝试访问它。如果无法访问该文件,则表示子域配置不正确。

  2. 使用“发布”功能发布 Web 服务,以便复制所有 DLL。

之后,尝试再次访问 Web API。

希望有所帮助。

【讨论】:

    【解决方案2】:

    “注意:在这种情况下,我创建了一个子域 'api',但 API 代码的所有内容与创建时相比没有变化。”

    您的上述评论是可疑的,您应该在根目录中发布您的 WEB API 应用程序。就像http://example.com 指向“MyExample”文件夹一样,那么应用程序应该发布在“MyExample”文件夹中。 之后,您将可以使用 http://example.com/api/{controller}/{action}

    访问您的 api

    【讨论】:

      【解决方案3】:

      只是一个简单的建议,我相信您已经考虑过,但是您是否在服务器的防火墙上打开了 http 端口 80?

      还可以在项目的根目录中粘贴一个普通的旧 html 文件,然后查看服务器是否提供它。

      【讨论】:

      • 由于 404 是网络服务器错误,如果网络服务器端口关闭,则不太可能返回此错误。
      【解决方案4】:

      在你的情况下,因为你创建了一个 'api' 的子域,你应该尝试

      http://api.mydomain.com/api/api/values
      

      请注意,如果您使用数据库来执行该功能,则应更改 web 配置中的 connectionString

      【讨论】:

        【解决方案5】:

        请验证您托管域上的 .net 框架,该框架可能是旧的。

        • Web api 2 应该在 4.5 框架上。

        【讨论】:

          【解决方案6】:

          web api 2 方法在本地机器上运行正常但在生产服务器上运行正常的一个原因是您调用的方法在本地机器上运行但不在远程服务器上运行。在这种情况下,您将收到消息 404 或 500,并且您会迷失为什么此路由会失败。 为什么一个方法会在远程服务器上失败,可能有很多原因。对我来说,我在我的方法中查询数据库,并且我的 connectionString 没有设置为远程服务器。 解决它的一种方法是在该特定方法中放置一些非常简单的代码并测试路由是否正常工作。然后检查您的原始代码是否有错误原因。

          【讨论】:

          • 我在我的项目中大量使用 web api2,我分享了我的个人经验来帮助大家(因为我得到了很多其他人的帮助)。
          • 我在我的项目中广泛使用web api2,我分享了我的个人经验来帮助大家(因为我得到了很多其他人的帮助)。错误 404 和 500 并不能说明您的路由正常,但方法会出错。这可能会让许多人感到困惑,因为他们可能认为路由/路径有问题。对于我的这一努力,我得到了评分,这对我来说非常令人惊讶。我很想知道这位伟大的专家对这个回复进行了评价的原因。他必须有勇气站出来用他的智慧启发我。我在等……
          猜你喜欢
          • 2016-09-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-05
          • 2014-01-15
          • 2021-12-28
          • 2011-11-11
          • 1970-01-01
          相关资源
          最近更新 更多