Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MVC项目中同时使用MVC控制器和Web控制器?_C#_Asp.net Mvc_Asp.net Mvc 4_Asp.net Web Api_Odata - Fatal编程技术网

C# 在MVC项目中同时使用MVC控制器和Web控制器?

C# 在MVC项目中同时使用MVC控制器和Web控制器?,c#,asp.net-mvc,asp.net-mvc-4,asp.net-web-api,odata,C#,Asp.net Mvc,Asp.net Mvc 4,Asp.net Web Api,Odata,我有一个比较大的项目,最初是在MVC4中创建的。但我想利用OData功能进行表排序等 目前,我正在使用温莎城堡解决我的MVC控制器。 如果我从ApiController继承了一个控制器-它不会得到解析,因为: IController System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) 方法被传递为nullcontrol

我有一个比较大的项目,最初是在MVC4中创建的。但我想利用OData功能进行表排序等

目前,我正在使用温莎城堡解决我的MVC控制器。

如果我从ApiController继承了一个控制器-它不会得到解析,因为:

IController System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType)
方法被传递为nullcontrollerType

我想要实现的是简单地返回IQuerable,并让ApicController按照OData标准进行分页和过滤

public class OdataController : ApiController
{
    [EnableQuery]
    public IQueryable<Employee> Get()
    {
        using (var repo = _factory.CreateRepository())
        {
            return repo.FilterAsQueryable<Employee>(x => true);
        }
    }
}
公共类OdataController:ApiController
{
[启用查询]
公共IQueryable Get()
{
使用(var repo=\u factory.CreateRepository())
{
return repo.FilterAsQueryable(x=>true);
}
}
}

有可能在一个项目中实现这一点吗?

您当然可以在同一个项目中使用web api和mvc控制器,并让它们通过Castle Windsor容器解决依赖关系

但是,web api控制器不是从与mvc控制器相同的控制器工厂创建的

您需要从
System.Web.Http.Dependencies
程序集中创建一个实现
idependencysolver
接口的类。让这个类使用你的容器

如何为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()
也许这可以帮助您: