带嵌套类的WebApi路由

本文关键字:WebApi 路由 嵌套 | 更新日期: 2023-09-27 18:12:27

是否可以MapHttpRoute到一个嵌套的ApiController类?如果是,什么RouteTemplate实现它?

嵌套控制器示例:

public class whatever
{
    public class NestedController : ApiController
    {
        [HttpGet]
        public object five()
        {
            return 5;
        }
    }
}

我试过使用

GET ApiRoute/whatever+nested/five

as typeof(whatever。NestedController)报告whatever+NestedController但是我得到

没有找到与控制器匹配的类型

带嵌套类的WebApi路由

似乎路由引擎只查找具体的类。它们在哪个程序集或哪个命名空间中并不重要,但它们不能嵌套在另一个类中,也不能是抽象的。

一个好处(虽然这是一个延伸)是,你可以"隐藏"在DLL中的控制器,并激活它们在一个Web应用程序,像这样:

DLL:

public class Wrapper { public class MyController : ApiController { /*code goes here*/ } }

Web应用程序:

public class MyController : Wrapper.MyController { }

话虽如此,我还是不推荐。最好按照设计来使用,因为你可能会打开一个安全漏洞,或者使应用程序容易受到API更新的影响。