我有一些插件,它们基本上是输入和输出类型定义。我有一个通用控制器,可以将其添加到mvc管道中。一切正常。
但是我在此通用控制器上设置api版本时遇到了麻烦。我知道您可以基于控制器类顶部的属性进行设置。但是由于您无法拥有此动态(属性),因此我无法为通用控制器的每个实例设置版本。
目前,我只是在运行时为每个实例编译控制器,然后使用roslyn编译器注册我。
有一种方法可以在mvc管道中注册控制器的管道中的某个地方设置api版本,并以不同的api版本端点终结。
答案 0 :(得分:0)
这可以通过使用 Conventions API来实现。它旨在支持这种确切类型的场景:
https://github.com/microsoft/aspnet-api-versioning/wiki/API-Version-Conventions
这仅对 closed-generics 有效,但要实现这一目标不应该做太多工作。这是几个基本示例:
// typed, closed generic
options.Conventions.Controller<GenericController<PlugIn1>>().HasApiVersion(1,0);
// untyped, closed generic
var controllerType = typeof(GenericController<>).MakeGenericType(new []{typeof(PlugIn1)});
options.Conventions.Controller(controllerType).HasApiVersion(1,0);
您还可以在 IControllerConvention 中编写自己的自定义约定。该方法可用于对从GenericController<>
继承的所有控制器进行版本控制。然后,您只需要将其添加到这样的约定中即可:
options.Conventions.Add(new PlugInControllerConvention());
希望这足以帮助您入门。随时问更多问题。