在MVC项目中同时使用MVC控制器和Web ApiController
本文关键字:MVC 控制器 ApiController Web 项目 | 更新日期: 2023-09-27 18:03:02
我有一个相对较大的项目最初创建在MVC 4。但是我想利用OData功能来进行表排序等。
此刻我使用温莎城堡来解决我的MVC控制器。http://blog.devdave.com/2013/04/castle——温莎aspnet - mvc 4. - html
如果我从ApiController继承一个控制器-它不会得到解决,因为:
IController System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType)
方法被传递nullcontrollerType。
我想实现的是简单地返回IQuerable,并让ApiController按照OData标准进行分页和过滤。
public class OdataController : ApiController
{
[EnableQuery]
public IQueryable<Employee> Get()
{
using (var repo = _factory.CreateRepository())
{
return repo.FilterAsQueryable<Employee>(x => true);
}
}
}
有可能在一个项目中实现这一点吗?
你当然可以在同一个项目中使用web api和mvc控制器,并让它们通过你的Castle Windsor容器来解决依赖关系。
然而,web api控制器和mvc控制器不是从同一个控制器工厂创建的。
您将需要从System.Web.Http.Dependencies
程序集创建一个实现IDependencyResolver
接口的类。让这个类使用你的容器
如何设置WebApi依赖解析器的语法取决于你使用的WebApi的版本。
WebApi 1
GlobalConfiguration.Configuration.DependencyResolver = new MyCastleWindsorResolver();
请看这篇博文
WebApi 2
var config = new HttpConfiguration();
// set up routing and other web api config and what have you
// ....
// register dependency resolver
config.DependencyResolver = new MyCastleWindsorResolver()