我有一个包含2个项目的C#解决方案:
在第一个项目中,我扩展了ApiController类来定制一些行为,我的目标是在创建其他项目时使用该dll,只需添加对它的引用即可提高生产力。 我所做的代码就是:
public class CustomController : ApiController
{
//add some properties and private/protected helping methods
public override Task<HttpResponseMessage> ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)
{
//customize some initialization before processing request.
}
}
第二个项目是一个虚拟项目,用于测试第一个项目是否有效,我为第一个项目(dll库)添加了一个引用
public class EmptyController : CustomController
{
[HttpGet]
public string Home()
{
return "whatever.";
}
}
配置文件:
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { action = "get", id = RouteParameter.Optional }
);
现在,当我运行第二个项目时,它会启动,但是当我尝试访问控制器(/ api / Empty / Home)时,我收到一条消息
“找不到与控制器名称匹配的类型”
我尝试将CustomController类从第一个项目复制到web项目,它运行得很好。但当我将它移回dll项目时,再次遇到同样的错误。
我已经尝试在配置文件中更改IAssembliesResolver服务,问题是dll已经加载了,不知道为什么它没有看到控制器。 有什么想法可能会出错吗?
答案 0 :(得分:0)
由于dll和webapp项目中的软件包版本不同,问题似乎发生了,因为模板,webapp使用的是旧版本,而dll则下载了最新版本。更新两个项目以使用相同的版本后,它可以正常工作。