我会告诉你一个方法来做到这一点。此代码仅供学习。在这里,我不是在谈论设计和最佳实践,所以请随意更改您想要的任何内容。
好吧,您必须按照以下步骤操作:
1)创建自定义ApiExplorer:
public class MyApiExplorer: ApiExplorer
{
private readonly string _version;
public MyApiExplorer(string version) : base(GlobalConfiguration.Configuration)
{
_version = version != null ? version.ToUpperInvariant() : "V1";
foreach(var apiDescription in ApiDescriptions)
{
apiDescription.RelativePath = apiDescription.RelativePath.Replace("{version}", _version);
}
}
public override bool ShouldExploreController(string controllerVariableValue, HttpControllerDescriptor controllerDescriptor,
IHttpRoute route)
{
return controllerDescriptor.ControllerType.FullName.Contains(_version);
}
}
a) 在构造函数中,_version 将被转换为大写字母(以防万一它作为小写字母传递),但如果它为空,那么它将采用 V1 作为默认值。然后更改相对路径以显示特定版本而不是 {version}。
b) ShouldExploreController(简而言之)决定是否将特定控制器显示在文档中。在这种情况下,我们将只向控制器显示其类型全名包含所选版本。
2) 转到 HelpController 类并更改 Index 方法,如下所示:
public ActionResult Index(string version)
{
//...
Configuration.Services.Replace(typeof(IApiExplorer), new MyApiExplorer(version));
return View(Configuration.Services.GetApiExplorer().ApiDescriptions);
}
我们正在用自己替换当前的 ApiExplorer,以便在调用 Configuration.Services.GetApiExplorer() 时返回
现在您可以使用此 .../help?version=v1 或 .../help?version=v2 或 .../help?version=v3 ,您将获得特定的 api 控制器文档。