0

У меня есть существующий проект ASP.NET MVC 4. Я хочу добавить в проект WebApi2. Поэтому я устанавливаю WebApi2 в Nuget и создаю ApiController. Когда я запущен проект, то я получил ошибкуДобавить WebApi 2 в существующий проект - Ninject

«MvcApplication.Infrastructure.NinjectControllerFactory» The IControllerFactory не возвращает контроллер для имени «API».

Мои NinjectControllerFactory:

public class NinjectControllerFactory : DefaultControllerFactory 
{ 
    private IKernel ninjectKernel; 

    public NinjectControllerFactory() 
    { 
     ninjectKernel = KernelSingleton.Instance.GetStandardKernel(); 
    } 

    protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) 
    { 
     return controllerType == null 
      ? null 
      : (IController)ninjectKernel.Get(controllerType); 
    } 
} 

EDIT

WebApiConfig:

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // TODO: Add any additional configuration code. 

     // Web API routes 
     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 
} 

Главный RouteConfig пуст, потому что у меня есть две области.

internal static class RouteConfig 
{ 
    internal static void RegisterRoutes(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Admin_default", 
      "Admin/{controller}/{action}/{id}", 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

internal static class RouteConfig 
{ 
    internal static void RegisterRoutes(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "User_default", 
      "{controller}/{action}/{id}", 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 
+0

Просьба указать маршруты WebApi и маршруты MVC. Похоже, проблема там. – NightOwl888

+0

@ NightOwl888 Добавлено. – thenewgai

ответ

1

Так как вы переместили «по умолчанию» маршрут будет область, вам нужно будет изменить порядок регистрации в вашем Global.asax.

AreaRegistration.RegisterAllAreas(); 

WebApiConfig.Register(GlobalConfiguration.Configuration); 

Должно быть:

WebApiConfig.Register(GlobalConfiguration.Configuration); 

AreaRegistration.RegisterAllAreas(); 

В противном случае, любой маршрут, который начинается с /api ударит маршрут по умолчанию и искать контроллер с именем api.

Смежные вопросы