Web Api 2 BaseController

时间:2015-05-27 20:28:05

标签: .net asp.net-web-api asp.net-web-api2 asp.net-web-api-routing

我有控制器

public class TestController : ApiController
{
   [HttpGet]
   public string Test()
   {
      return "test";
   }
}

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes(new CustomDirectRouteProvider());

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

public class CustomDirectRouteProvider : DefaultDirectRouteProvider
{
    protected override IReadOnlyList<IDirectRouteFactory>
    GetActionRouteFactories(HttpActionDescriptor actionDescriptor)
    {
        return actionDescriptor.GetCustomAttributes<IDirectRouteFactory>
        (inherit: true);
    }
}

它的工作方式应该如此,但如果我像

那样
public class TestController : ApiControllerBase
{
   [HttpGet]
   public string Test()
   {
      return "test";
   }
}

public class ApiControllerBase : ApiController
{
}

我得到404没有找到与名为&#39; Test&#39;。

的控制器相匹配的类型

我做错了什么?我添加了CustumRouteProvider,甚至认为我认为它只用于注释,但我也尝试过,但没有运气。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

问题是ApiControllerBase在另一个项目中,即使该项目有所有引用并正常编译。奇怪的。