1

这是一个随机的,它让我感到困惑。

我刚刚将我的项目更新为 WebAPI 2,因此我可以使用新的属性路由功能。我按照官方网站上的教程进行操作,最后在我的全局文件中得到了这样的配置:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RouteConfig.RegisterRoutes(RouteTable.Routes);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    BundleConfig.RegisterBundles(BundleTable.Bundles);

    GlobalConfiguration.Configure(WebApiConfig.Register);
}

然后在WebApiConfig课堂上我像这样设置属性路由:

public static void Register(HttpConfiguration config)
{
    config.DependencyResolver = new DependencyResolverFactory();
    config.MapHttpAttributeRoutes();
}

然后我想要一个带有路由“api/users/{id}”的操作方法:

[Route("api/users/{id}")]
public UserAccountModel GetUserAccount(string id)
{
    return _userAccountService.GetAccountDetails(id);
}

到目前为止,这一切对我来说都很好。但是,当我尝试走这条路线时,我得到了一个例外:

IControllerFactory 'withoomph.Common.Ioc.DependencyControllerFactory' 没有返回名称为 'api' 的控制器。

DependencyControllerFactory是我为我的MVC控制器进行依赖注入的地方,所以不确定它为什么会去那里。

奇怪的是,如果我改变路线,让它有一个额外的部分:

[Route("api/users/test/{id}")]
public UserAccountModel GetUserAccount(string id)
{
    return _userAccountService.GetAccountDetails(id);
}

有用!我已经在几个不同的控制器中尝试了这个,使用不同的名称,使用 api,不使用 api 等。它总是一样的:如果路由少于 4 个部分,它就不起作用。超过4个,它的工作原理。

有谁知道他在搞什么鬼??!!

4

1 回答 1

3

您需要重新排序上面的注册代码,因为 MVC 路由匹配您的请求 url,因为{controller}/{action}/{id}与 Web API 的特定路由api/{controller}/{id}( 根据路由指南,必须在通用路由之前注册更具体的路由。

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);

        RouteConfig.RegisterRoutes(RouteTable.Routes);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
于 2013-11-11T13:44:06.303 回答