You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8 Web API部署时如何仅发布V1版本并屏蔽V2版本

.NET 8 Web API 仅部署V1版本端点的实现方案

以下几种方法可以帮你彻底限制V2版本端点不被部署,按需选择:

方法一:编译层面排除V2代码(最彻底)

直接通过条件编译指令,让Release部署时不编译V2控制器的代码,从根源上移除V2端点。

  1. 给V2控制器类添加条件编译标记:
#if !EXCLUDE_V2
[ApiController]
[Route("api/v2/[controller]")]
public class SampleV2Controller : ControllerBase
{
    // V2端点的业务逻辑
}
#endif
  1. 在项目文件(.csproj)中配置Release模式下的编译常量:
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
  <DefineConstants>$(DefineConstants);EXCLUDE_V2</DefineConstants>
</PropertyGroup>

这样发布Release版本时,编译器会自动跳过V2控制器的代码,最终部署的程序集里完全没有V2相关内容。

方法二:启动时筛选控制器(运行时屏蔽)

如果不想修改代码结构,可以在Program.cs中配置控制器筛选逻辑,让应用启动时只加载V1的控制器。

方式A:按命名空间筛选

假设V1控制器都在YourNamespace.Api.V1命名空间下,V2在YourNamespace.Api.V2:

builder.Services.AddControllers(options =>
{
    // 添加筛选器,只包含命名空间含V1的控制器
    options.Filters.Add(new ControllerTypeFilterAttribute(type => 
        type.Namespace?.Contains(".V1.") == true));
});

方式B:自定义控制器特性筛选

先给V1控制器加自定义特性[IncludeInDeployment],然后筛选加载带该特性的控制器:

// 自定义特性
[AttributeUsage(AttributeTargets.Class)]
public class IncludeInDeploymentAttribute : Attribute { }

// V1控制器标记特性
[IncludeInDeployment]
[ApiController]
[Route("api/v1/[controller]")]
public class SampleV1Controller : ControllerBase { }

// Program.cs中配置筛选
builder.Services.AddControllers()
    .ConfigureApplicationPartManager(apm =>
    {
        var originalProvider = apm.FeatureProviders.OfType<ControllerFeatureProvider>().First();
        apm.FeatureProviders.Remove(originalProvider);
        apm.FeatureProviders.Add(new FilteredControllerProvider());
    });

// 自定义控制器提供类
public class FilteredControllerProvider : ControllerFeatureProvider
{
    protected override bool IsController(TypeInfo typeInfo)
    {
        // 只加载带IncludeInDeployment特性的控制器
        return base.IsController(typeInfo) 
               && typeInfo.GetCustomAttribute<IncludeInDeploymentAttribute>() != null;
    }
}

方法三:拆分项目单独部署(适合长期版本维护)

如果V1和V2的业务逻辑差异较大,建议直接将V1和V2拆分成两个独立的Web API项目,部署时只发布V1项目即可,这种方式最清晰,也方便后续版本迭代。


内容的提问来源于stack exchange,提问作者swara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 02:22:35