我开发了WebAPI应用程序,我需要使用自定义控制器选择器,所以我创建了这个:
public class CustomControllerSelector : DefaultHttpControllerSelector
{
(...)
public override HttpControllerDescriptor SelectController(HttpRequestMessage request)
{
// It's just a simplified logic which exemplify the problem
var controller =_controllerAssembly.GetType("App.Controllers.MyController");
return new HttpControllerDescriptor(this.httpConfiguration, controller.Name, controller);
}
}
我的控制器包含两个GET方法:
public class MyController : System.Web.Http.ApiController
{
[Route("~/api/myController/GetAll")]
public IEnumerable<MyModel> GetAll(){ ... }
public MyModel Get(){ ... }
}
不幸的是,当我去 http:// localhost / api / myController / 时,我收到错误:
找到符合请求的多项操作:
GetAll类型App.Controllers.MyController
获取App.Controllers.MyController类型&#34;
但是如果我去 http:// localhost / api / myController / GetAll ,它会按预期工作,并返回对象的集合。
值得一提的是,如果我不使用自定义控制器选择器,它就像魅力一样,两个动作都会给出有效的响应。
您知道为什么自定义控制器选择器(从默认选择器派生)会导致此问题吗?
解决方法:
由于原始(默认)控制器选择器已正确初始化并按预期工作,因此我将其聚合而不是从中继承。
class CustomControllerSelector : IHttpControllerSelector
{
private DefaultHttpControllerSelector defaultSelector;
public CustomControllerSelector(DefaultHttpControllerSelector defaultSelector)
{
(...)
}