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

C#设置非200-399状态码时Http响应为空的问题求助

问题描述

尝试根据不同状态码返回对应HTTP响应,但仅当状态码处于200-399区间时能收到响应内容。取消注释设置状态码的语句后,仅200状态码能返回内容,设置250、400等状态码时响应为空。现有代码如下:

public static void GetFileBrandingCSS(HttpContext context, string path)
{
    string extension = Path.GetExtension(path);
    string lines;
    
    if (!string.IsNullOrEmpty(extension) && extension.Equals(".css"))
    {
        try
        {
            lines = File.ReadAllText(path);
            //context.Response.StatusCode = 200;
        }
        catch (Exception e)
        {
            lines = "Couldn't find the file " + path ;
            //context.Response.StatusCode = 400;
        }
    }
    else
    {
        lines = "The file " + path + " is not css.";
        //context.Response.StatusCode = 415;
    }

    context.Response.ContentType = "text/css";
    context.Response.Write(lines);
}
解决方案

核心问题是IIS(或ASP.NET响应管道)默认会拦截错误状态码(如4xx、5xx)的响应体,替换为自定义错误页面,导致自定义内容无法返回。部分非2xx的成功状态码也可能被中间件处理,需明确允许响应体发送。

修改后的代码如下:

public static void GetFileBrandingCSS(HttpContext context, string path)
{
    string extension = Path.GetExtension(path);
    string lines;
    int statusCode = 200; // 默认200状态码
    
    if (!string.IsNullOrEmpty(extension) && extension.Equals(".css"))
    {
        try
        {
            lines = File.ReadAllText(path);
        }
        catch (Exception e)
        {
            lines = "Couldn't find the file " + path;
            statusCode = 404; // 文件未找到用404更符合HTTP规范,而非400
        }
    }
    else
    {
        lines = "The file " + path + " is not css.";
        statusCode = 415;
    }

    // 禁用IIS自定义错误,确保自定义响应体能直接返回给客户端
    context.Response.TrySkipIisCustomErrors = true;
    context.Response.StatusCode = statusCode;
    context.Response.ContentType = "text/css";
    context.Response.Write(lines);
}

关键修改点

  • 添加context.Response.TrySkipIisCustomErrors = true;:跳过IIS的自定义错误页面拦截,让自定义响应内容正常发送。
  • 统一状态码管理:将状态码提取为变量最后统一设置,避免分散设置带来的时序问题。
  • 修正状态码语义:把文件未找到的状态码从400改为404,更贴合HTTP状态码的标准定义。

修改后,无论设置2xx、3xx、4xx还是5xx状态码,自定义的响应内容都能正常返回给客户端。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:54:52