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

.NET Core API 3.1 Swagger错误响应无描述问题求助(HTTPS重定向异常)

问题解决方案:.NET Core 3.1 + Swashbuckle 6.4.0 启用HTTPS重定向时错误响应丢失状态描述

核心原因推测

启用UseHttpsRedirection()后,重定向中间件可能在原始错误响应生成前截断了请求流程,导致状态码对应的描述信息无法正常返回。以下是针对性的解决方法:


1. 调整中间件注册顺序

确保错误处理逻辑优先于HTTPS重定向执行,让错误响应在重定向触发前完成生成:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseSwagger();
        app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "MyAPI v1"));
    }

    // 先注册错误处理中间件
    app.UseExceptionHandler("/error");
    
    // 再注册HTTPS重定向
    app.UseHttpsRedirection();

    app.UseRouting();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

2. 实现自定义错误响应处理器

通过自定义错误控制器,强制返回包含状态描述的标准化响应,不受重定向逻辑干扰:

步骤1:创建错误处理控制器

[ApiController]
[Route("/error")]
public class ErrorController : ControllerBase
{
    [HttpGet]
    [HttpPost]
    [HttpPut]
    [HttpDelete]
    [HttpPatch]
    public IActionResult Error()
    {
        var statusCode = HttpContext.Response.StatusCode;
        // 映射状态码对应的描述文本
        var statusDesc = statusCode switch
        {
            400 => "Bad Request: 请求参数格式或内容无效",
            401 => "Unauthorized: 未提供有效认证信息",
            403 => "Forbidden: 无权限访问该资源",
            404 => "Not Found: 请求的资源不存在",
            500 => "Internal Server Error: 服务器处理请求时发生异常",
            _ => $"Error {statusCode}"
        };

        return Problem(
            title: statusDesc,
            statusCode: statusCode,
            detail: HttpContext.Features.Get<IExceptionHandlerFeature>()?.Error?.Message
        );
    }
}

步骤2:确保错误处理中间件优先级

在Configure方法中保持UseExceptionHandler("/error")在UseHttpsRedirection()之前注册。

3. 配置Swagger UI展示错误响应描述

让Swagger UI能直观显示错误状态对应的说明:

services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "MyAPI", Version = "v1" });

    // 为所有接口添加常见错误响应的描述
    c.OperationFilter<CustomErrorResponseFilter>();
});

// 自定义响应过滤器
public class CustomErrorResponseFilter : IOperationFilter
{
    public void Apply(OpenApiOperation operation, OperationFilterContext context)
    {
        operation.Responses.TryAdd("400", new OpenApiResponse { Description = "Bad Request" });
        operation.Responses.TryAdd("401", new OpenApiResponse { Description = "Unauthorized" });
        operation.Responses.TryAdd("403", new OpenApiResponse { Description = "Forbidden" });
        operation.Responses.TryAdd("500", new OpenApiResponse { Description = "Internal Server Error" });
    }
}

4. 优化HTTPS重定向配置

调整重定向规则,避免截断原始请求的响应内容:

services.AddHttpsRedirection(options =>
{
    // 使用307临时重定向,保留原始请求方法和数据
    options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;
    options.HttpsPort = 443;
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:40:42