我遇到了麻烦,让 Ninject 和 WebAPI.All 一起工作。我会更具体一点:
首先,我使用了 WebApi.All 包,看起来它对我来说很好用。
其次,我RegisterRoutes
在下Global.asax
一行添加:
routes.Add(new ServiceRoute("api/contacts", new HttpServiceHostFactory(), typeof(ContactsApi)));
所以最终的结果是:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(new ServiceRoute("api/contacts", new HttpServiceHostFactory(), typeof(ContactsApi)));
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
}
一切似乎都很好,但是当我尝试将用户重定向到特定操作时,例如:
return RedirectToAction("Index", "Home");
浏览器中的网址是
localhost:789/api/contacts?action=Index&controller=Home
哪个不好。我换了行RegisterRoute
,现在看起来:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
routes.Add(new ServiceRoute("api/contacts", new HttpServiceHostFactory(), typeof(ContactsApi)));
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
}
现在重定向工作正常,但是当我尝试访问我的 API 操作时,我收到错误消息,告诉我
Ninject couldn't return controller "api"
这是绝对合乎逻辑的,我没有这样的控制器。
我确实搜索了一些如何使 Ninject 与 WebApi 一起工作的信息,但我发现的所有内容都仅适用于 MVC4 或 .Net 4.5。由于技术问题,我无法将我的项目转移到新平台,所以我需要为这个版本找到一个可行的解决方案。
这个答案看起来像是一个可行的解决方案,但是当我尝试启动项目时,我遇到了编译器错误
CreateInstance = (serviceType, context, request) => kernel.Get(serviceType);
告诉我:
System.Net.Http.HttpRequestMessage is defined in an assembly that is not referenced
关于在程序集中添加引用的一些事情
System.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
我不知道下一步该做什么,我找不到任何关于 .NET 4 和 MVC3 上的带有 webapi 的 ninject 的有用信息。任何帮助,将不胜感激。