【发布时间】:2014-07-03 00:50:35
【问题描述】:
我正在开发一个 RESTful Web api 服务。它是 web api v.1,而不是 v.2。我也在 Visual Studio 2010 SP1 上进行开发。我已经为 VS2010 SP1 安装了 MVC 4。
请理解并记住,升级到较新版本的 VS 或 Web Api 2 不是一种选择。
我有以下问题发生 Windows 更新后。
当我尝试以这种方式使用我的 RESTful api 时......
http://url.com/documents/(获取所有文件)我收到以下错误...
找不到资源。
描述:HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请检查以下 URL 并确保其拼写正确。
这是堆栈跟踪。
[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 时,该文件几乎首先在管道中执行。甚至在实际的控制器之前。好吧,当我收到错误时,永远不会调用此文件,这向我确认了“网络服务器”(VS 开发服务器或 IIS 7)是引发异常的那个。
我已经用尽了在这里找到的每一个解决方案。将我的 web.config 更改为多个处理程序配置,为 VS2010 重新安装 MVC 4,创建了一个全新的项目......所有这些努力都没有显示任何结果。
就像我说的那样,在我的电脑从 Windows 更新重新启动之前,这一切都很好,但是......为什么它在服务器上也失败了?在错误开始发生后,我确实将我的 api 部署到了服务器。
谢谢。
【问题讨论】:
标签: visual-studio-2010 asp.net-mvc-4 iis-7 asp.net-web-api