我正在开发一个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部署到服务器。
感谢。
答案 0 :(得分:0)
问题不在Web API中(与其版本或Visual Studio 2010无关),它是尝试提供服务和失败的静态文件处理程序。
替代品: 你的网站上有文件夹吗?摆脱它。 1.删除目录浏览的静态文件处理程序并重新添加。 2.使用RAMMFAR(少推荐)