如何注册已在AREA中创建的控制器

时间:2012-02-28 16:38:32

标签: asp.net-mvc-4 asp.net-web-api

我正在使用MVC4的WEB API来公开控制器。

最初我创建了一个MVC4 WEBAPI项目,设置项目不打开任何网页,等待外部应用程序调用URL(WEB API)。 VS2010中的项目设置为从IIS7 Express运行,而不是VS2010的Dev Server。这没关系,浏览器会提示我下载文件。这对我来说没问题,因为浏览器不知道如何处理返回的数据(RAW TEXT)。

接下来,我在MVC4项目区域中创建了一个AREA,然后添加了一个控制器(WEB API类型)。

然后我再次运行该项目并在浏览器中输入了URL(WEB API)。它失败了。

2 个答案:

答案 0 :(得分:2)

DefaultHttpControllerFactory默认情况下不适用于Areas。要获得此功能,您必须编写自定义的HttpControllerFactory。

您可以在帖子How to create HttpControllerFactory to support Areas

找到如何执行此操作

答案 1 :(得分:1)

虽然可以将WebApi控制器放在不同的区域,但ASP.NET MVC 4 RC仍然会将这些ApiController视为它们都位于同一名称空间中。这是DefaultHttpControllerSelector的限制,它负责选择合适的ApiController。

幸运的是,您可以注入自己的此类实现。事实上,我已经遇到过这个问题并写了一个“区域感知”的HttpControllerSelector。您可以在此处找到关于此问题及其解决方案的博客文章:

http://blogs.infosupport.com/asp-net-mvc-4-rc-getting-webapi-and-areas-to-play-nicely/