我有一个包含Web API的ASP.NET MVC 4网站。使用IIS Express作为Web服务器,在Windows 8上使用Visual Studio 2012和.NET 4.5开发和测试该网站。 在这个开发环境中一切正常。对ASP.NET Web API的所有请求都返回404错误
现在,它被部署在IIS 7.5的Windows 2008 R2(SP1)服务器上。 .NET 4.0和4.5已安装。应用程序池在集成管道模式下与.NET 4.0一起运行。
在这个生产环境下,MVC网站的工作原理是,Web API没有。对于每个请求,无论GET还是POST,我都会收到404错误。如果我只是在浏览器(在服务器本地打开IE 9)中输入一个Web API Url来运行一个GET请求,我会得到一个404页面。如果我发出了从Web API客户端应用程序POST请求,我收到了404,以及与消息:
我创建了一个
没有HTTP资源发现,请求匹配URI使用MVC 4和Web API测试网站,并将其部署在同一台服务器上,并且Web API可以工作。 Web API和MVC程序集在两个项目中都具有相同的版本号。
此外,我已将Web API Route Debugger添加到应用程序中。如果我使用一个有效的路由像
http://myserver/api/order/12
我得到以下结果:对于我来说,这意味着正确的路由模板
Api/{Controller}/{Id}
已发现并正确地解析为控制器Order
和Id=12
。控制器(来自ApiController
)存在于所有MVC控制器所在的Web组件中。不过,我不知道是什么状态
000
可能意味着以及为什么没有显示“路径选择”一节(这通常是这种情况,即使集不包含单ApiController
是,见截图上面的链接页面)。不知何故,它看起来像没有找到ApiController
甚至没有搜索或搜索失败的默默。IIS日志文件没有显示任何有用的信息。更改各种应用程序池设置并使用相同的应用程序池进行测试和实际应用程序并没有帮助。
我目前正在从应用程序中删除“功能”,配置设置,第三方程序集等,以最终将其缩小到测试应用程序的小尺寸,并希望在某些时候它开始工作。
有人知道问题可能是什么吗?另外任何调试或记录的想法可能找到原因是非常受欢迎的。
编辑
由于达雷尔 - 米勒在我下面的评论尖端集成了Tracing for ASP.NET Web Api。
对于(GET)请求URL
http://myserver/api/order/12
我得到如下:
- 在开发环境中,成功的(缩略形式):
消息:
http://localhost:50020/api/order/12
;类别: System.Web.Http.Request控制器的选择和实例...
运营商:DefaultHttpControllerSelector;操作:SelectController; 消息:Route =“controller:order,id:12”;类别: System.Web.Http.Controllers
运算符:DefaultHttpControllerSelector;操作:SelectController; 消息:订购;类别:System.Web.Http.Controllers
运算符:HttpControllerDescriptor;操作:CreateController; 消息:;类别:System.Web.Http.Controllers
运算符:DefaultHttpControllerActivator;操作:创建;讯息: ;类别:System.Web.Http.Controllers
运算符:DefaultHttpControllerActivator;操作:创建;消息: MyApplication.ApiControllers.OrderController;类别: System.Web.Http.Controllers
行动选择,参数绑定和调用动作如下...
内容协商和格式结果...
运营商:DefaultContentNegotiator ;操作:协商;消息:典型值= “字符串” ... 更多
处置控制器...
运营商:OrderController;操作:处理;信息: ;分类: System.Web.Http.Controllers
- 在生产环境中,未成功(在短形式):
消息:
http://myserver/api/order/12
;类别: System.Web.Http.Request运算符:DefaultHttpControllerSelector;操作:SelectController; 消息:Route =“controller:order,id:12”;分类: System.Web.Http。控制器
控制器激活,动作选择,参数绑定,调用行动失踪,它遵循内容 谈判,并立即格式化的错误消息的整个部分:
运营商:DefaultContentNegotiator;操作:协商;消息: TYPE =“HttpError” ... 更多
您可能需要激活服务器角色>互联网信息服务>万维网服务一些IIS功能。 我不知道你需要激活什么,但我认为你的问题可以在这里! –
尝试打开网页API跟踪http://www.asp.net/web-api/overview/testing-and-debugging/tracing-in-aspnet-web-api –
看起来像你的WebAPI未注册。你的'Global.asax'和'WebApiConfig'是怎么回事?它们内部是否有条件配置? – Liel