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

.NET Web API返回带自定义消息的401错误(返回值为string)

解决方案

由于你的方法返回类型是string而非IHttpActionResult,可以直接通过操作Response对象的响应流来写入自定义消息,同时保留401状态码,具体修改如下:

方案1:返回纯文本消息

修改AuthenticationException的捕获块:

catch (AuthenticationException ex)
{
    Response.StatusCode = (int)HttpStatusCode.Unauthorized;
    // 设置响应内容类型为纯文本
    Response.ContentType = "text/plain";
    // 写入自定义消息到响应流
    Response.Write($"认证失败:{ex.Message}");
    // 返回空字符串,避免默认返回的" N"覆盖自定义内容
    return string.Empty;
}

方案2:返回JSON格式消息(更适合前端解析)

如果前端期望JSON格式的错误信息,可以序列化一个错误对象写入响应:

catch (AuthenticationException ex)
{
    Response.StatusCode = (int)HttpStatusCode.Unauthorized;
    Response.ContentType = "application/json";
    // 构造错误对象并序列化为JSON
    var errorResponse = new { 
        Code = 401, 
        Message = "登录认证失败,请检查账号信息",
        Detail = ex.Message 
    };
    Response.Write(Newtonsoft.Json.JsonConvert.SerializeObject(errorResponse));
    return string.Empty;
}

注意事项

  • 方案2需要引用Newtonsoft.Json包,若未安装可通过NuGet添加。
  • 返回string.Empty是为了避免方法默认返回值覆盖你写入响应流的自定义内容,Web API会将方法返回值作为响应体,因此这里需要通过Response.Write主动控制响应体内容。

内容的提问来源于stack exchange,提问作者Eric Brown - Cal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 08:33:35