ASP.NET Core中如何在Swagger模拟HTTP 206部分内容?
配置Swagger支持HTTP 206部分请求(断点续传)
你的API已经通过ProducesResponseType标记了206响应,但要在Swagger里正常测试这个大文件下载场景,需要完成两步关键配置:确保API实际支持Range请求,以及让Swagger UI提供Range请求头的输入入口。
1. 让API真正处理部分请求
ASP.NET Core的PhysicalFileResult默认未启用Range请求处理,需要手动开启。修改你的接口代码:
[HttpGet("Files/{id:guid}/{name}")] [ProducesResponseType(typeof(PhysicalFileResult), 200)] [ProducesResponseType(typeof(PhysicalFileResult), 206)] public async Task<PhysicalFileResult> GetFooFile(Guid id, string name, CancellationToken cancellationToken) { var fileResult = PhysicalFile(Foo(parameters)); // 启用Range请求支持,API才会处理断点续传逻辑 fileResult.EnableRangeProcessing = true; return fileResult; }
2. 配置Swagger显示Range请求头
Swagger UI默认不会展示Range请求头,需要添加自定义操作过滤器来显示该参数:
第一步:创建操作过滤器类
public class AddRangeHeaderFilter : IOperationFilter { public void Apply(OpenApiOperation operation, OperationFilterContext context) { // 仅给标记了206响应的接口添加Range请求头 if (operation.Responses.ContainsKey("206")) { operation.Parameters ??= new List<OpenApiParameter>(); operation.Parameters.Add(new OpenApiParameter { Name = "Range", In = ParameterLocation.Header, Description = "指定请求的文件字节范围,格式示例:bytes=0-1023", Required = false, Schema = new OpenApiSchema { Type = "string", Example = new OpenApiString("bytes=0-1023") } }); } } }
第二步:注册过滤器到Swagger
在Program.cs(或Startup.cs)的Swagger配置中添加这个过滤器:
builder.Services.AddSwaggerGen(c => { // 注册自定义过滤器 c.OperationFilter<AddRangeHeaderFilter>(); // 你的其他Swagger配置(比如文档信息、注释等) });
3. 在Swagger UI中测试206请求
启动API后打开Swagger UI,找到对应的文件下载接口:
- 在请求头区域找到新增的
Range参数,输入符合格式的值(比如bytes=0-1023) - 发送请求,此时API会返回206 Partial Content响应,同时携带
Content-Range头和对应的文件片段
内容的提问来源于stack exchange,提问作者Hicham Bouchikhi
相关产品推荐
相关产品推荐

