在同一个项目中,我有两个类似的启动类是这样的:如何通过名称空间限制Asp.net Web API/Owin发现控制器?
namespace X.A
{
public class AStartup
{
public void Configuration(IAppBuilder appBuilder)
{
HttpConfiguration config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
config.EnsureInitialized();
appBuilder.UseWebApi(config);
}
}
}
和
namespace X.B
{
public class BStartup
{
public void Configuration(IAppBuilder appBuilder)
{
HttpConfiguration config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
config.EnsureInitialized();
appBuilder.UseWebApi(config);
}
}
}
我也有几个控制器,有些是在命名空间XA ..:
namespace X.A.SomePlace
{
[RoutePrefix("A/SomeRouting")]
public class Controller1 : ApiController
{
[Route("SomeMethod")]
[HttpPost]
[ResponseType(typeof(SomeMethodResponse))]
public IHttpActionResult GetParameters([FromBody] SomeMethodRequest request)
{
// Some code
}
}
}
...和其他名称空间XB ..:
namespace X.B.SomeOtherPlace
{
[RoutePrefix("B/AnotherRouting")]
public class Controller2 : ApiController
{
[Route("AnotherMethod")]
[HttpPost]
[ResponseType(typeof(AnotherMethodResponse))]
public IHttpActionResult AnotherMethod([FromBody] AnotherMethodRequest request)
{
// Another code
}
}
}
...和所有控制器都在同一个Asssembly中。
目前,各控制器自动的获得注册这两个API。 我想,以限制命名空间中的控制器发现(即AStartup登记从X.A所有控制器....和BStartup登记从X.B所有控制器......)
有没有办法用MapHttpAttributeRoutes做到这一点?
我会还高兴不使用属性的路由另一种方法(即如果你有一个方法,在那里我有编程,以明确地登记每个控制器,将工作对我罚款)。
各种控制器有不同的名称空间,但都在同一个程序集(将更新问题以反映此)。你认为仍然可以使用CustomAssemblyResolver来实现这个过滤吗? – Ramsey
嗯,不确定。他们不能在不同的集会中有一个原因吗? – peco