未找到Web API 404文件或目录" root"路线

时间:2014-05-14 19:34:19

标签: visual-studio-2010 asp.net-mvc-4 iis-7 asp.net-web-api

我正在开发一个RESTful web api服务。它是web api v.1,而不是v.2。我也在Visual Studio 2010 SP1上进行开发。我已经为VS2010 SP1安装了MVC 4。

请理解并记住,升级到较新版本的VS或Web Api 2不是一种选择。

在Windows Update出现后出现以下问题

当我尝试以这种方式使用我的RESTful api时......

http://url.com/documents/(获取所有文件)我收到以下错误...

无法找到资源。

描述: HTTP 404.您要查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用。请查看以下网址,确保拼写正确。

这是堆栈跟踪。

[HttpException]: File does not exist.   at System.Web.StaticFileHandler.GetFileInfo(String virtualPathWithPathInfo, String physicalPath, HttpResponse response)   at System.Web.StaticFileHandler.ProcessRequestInternal(HttpContext context, String overrideVirtualPath)   at System.Web.DefaultHttpHandler.BeginProcessRequest(HttpContext context, AsyncCallback callback, Object state)   at system.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

如果我直接指定操作名称,则可以。例如......

http://url.com/documents/get(获取所有文件)或

http://url.com/documents/7(获取文件ID = 7。

只有在按默认名称调用它时才会失败。我已经在这里阅读了类似的情况,我试图按照他们的解决方案,但他们没有正确地为我工作。

现在,我知道不是“web api路由”问题,因为我实际上获得了.net默认异常页面html标记(我使用Postman来测试我的web服务)。当我强制“路由问题”时,我得到一个JSON错误描述,这意味着控制器实际上已在管道中创建并返回响应。

另外,我有一个继承自DelegatingHandler的自定义文件(SecurityHandler)。每次调用api时,该文件几乎在管道中首先执行。甚至在实际控制器之前。好吧,当我收到错误时,永远不会调用此文件,这向我确认“webserver”(VS开发服务器或IIS 7)是抛出异常的那个。

我已经用尽了我在这里找到的每一个解决方案。将我的web.config更改为多个处理程序配置,为VS2010重新安装MVC 4,创建了一个全新的项目......所有这些努力都没有显示任何结果。

就像我说的,这是完全正常的,直到我的电脑重新启动从Windows Update BUT ...为什么它也在服务器中失败?在错误开始发生后,我确实将我的api部署到服务器。

感谢。

1 个答案:

答案 0 :(得分:0)

问题不在Web API中(与其版本或Visual Studio 2010无关),它是尝试提供服务和失败的静态文件处理程序。

替代品: 你的网站上有文件夹吗?摆脱它。 1.删​​除目录浏览的静态文件处理程序并重新添加。 2.使用RAMMFAR(少推荐)