【问题标题】:Add WebApi 2 to existing project - Ninject将 WebApi 2 添加到现有项目 - Ninject
【发布时间】:2018-01-27 18:08:12
【问题描述】:

我有现有的项目 ASP.NET MVC 4。我想添加到项目 WebApi2。所以我在 Nuget 中安装了 WebApi2 并创建了 ApiController。当我运行项目时出现错误

IControllerFactory 'MvcApplication.Infrastructure.NinjectControllerFactory' 没有返回名称为 '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);
    }
}

编辑

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 }
        );
    }
}

Main 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 }
        );
    }
}

【问题讨论】:

  • 请发布您的 WebApi 路由和 MVC 路由。听起来问题就在那里。

标签: c# asp.net-mvc-4 asp.net-web-api dependency-injection ninject


【解决方案1】:

由于您已将“默认”路线移动为区域,因此您需要颠倒您在Global.asax 中的注册顺序。

AreaRegistration.RegisterAllAreas();

WebApiConfig.Register(GlobalConfiguration.Configuration);

应该是:

WebApiConfig.Register(GlobalConfiguration.Configuration);

AreaRegistration.RegisterAllAreas();

否则,任何以/api 开头的路由都会命中您的默认路由并寻找名为api 的控制器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2020-12-22
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多