我已经开发了一个在本地运行良好的新WEB API 2,但是当我将相同的代码上传到我的生产服务器(在本例中为Arvixe)时,我得到的就是404。我花了两个小时在网上搜索,阅读论坛等等。并且找不到解决方案,所以我在这里问我最后的努力。
我目前只使用新建项目>创建时创建的默认项目进行测试Visual Studio中的ASP.NET Web API 2空项目。这将创建一个带有单个ValuesController
的空项目。您应该能够通过调用/api/values
来响应JSON,但这甚至不起作用。
我正在使用Fiddler在本地和Web服务器上测试API。
http://localhost:1993/api/values <--- works great
但是
http://api.mydomain.com/api/values <--- returns 404
注意:在这种情况下我创建了一个子域“api”,但是API的代码的所有内容都与创建它时没有变化。
为什么世界上这在本地工作而不在生产网络服务器上工作?
答案 0 :(得分:1)
服务器返回404(未找到)可能表示很多事情。但是,您可以使用以下步骤进行检查:
将一个简单的文本文档(如readme.txt)添加到您的文件夹子域http://api.mydomain.com,并尝试访问该文件。如果您无法访问该文件,则表示子域未正确配置。
使用&#34;发布&#34;发布网络服务;功能,以便复制所有DLL。
之后,尝试再次访问Web ApI。
希望有所帮助。
答案 1 :(得分:0)
“注意:在这种情况下我创建了一个子域'api',但是API的代码的所有内容都与创建它时没有任何关系。”
您的上述评论是可疑的,您应该在根目录中发布您的WEB API应用程序。就像http://example.com指向“MyExample”文件夹一样,应用程序应该发布在“MyExample”文件夹中。 之后,您可以使用http://example.com/api/ {controller} / {action}
访问您的API答案 2 :(得分:0)
我确定您已经考虑过一个简单的建议,但是您是否在服务器的防火墙上打开了http端口80?
还在项目的根目录中粘贴一个普通的旧html文件,看看服务器是否提供了它。
答案 3 :(得分:0)
在您的情况下,由于您创建了'api'的子域,因此您应该尝试
http://api.mydomain.com/api/api/values
请注意,如果您正在为该函数使用数据库,则应更改Web配置中的connectionString
答案 4 :(得分:0)
请验证您托管域上的.net框架可能是旧框架。
答案 5 :(得分:-2)
Web api 2方法在本地计算机上运行正常但在生产服务器上运行正常的一个原因是您调用的方法是在本地计算机上运行,而不是在远程服务器上运行。在这种情况下,您将收到消息404或500,并且您将丢失为什么此路由失败。 为什么一个方法会在远程服务器上失败,原因可能有很多。对我来说,我在我的方法中查询数据库,而我的connectionString没有为远程服务器设置。 解决它的一种方法是在该特定方法中放入一些非常简单的代码并测试路由是否正常工作。然后检查原始代码是否有错误原因。