繁体   English   中英

当API路由少于4个时,Web API属性路由无法正常工作

[英]Web API Attribute Routing not working when less than 4 parts to route

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

我刚刚将我的项目更新为WebAPI 2,因此我可以使用新的属性路由功能。 我按照官方网站上的教程,最终在我的全局文件中使用config,如下所示:

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,它的工作原理。

有谁知道他的软糖是怎么回事?? !!

您需要重新订购上面的注册码,因为您的请求URL与MVC路由匹配,因为它比Web API的特定路由( api/{controller}/{id} )更通用(例如: {controller}/{action}/{id}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);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM