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

如何在ASP.NET Core 6中添加自定义401错误提示信息

如何返回带自定义消息的401错误

针对你的ASP.NET Core控制器场景,有两种常用方式实现带自定义消息的401响应:

1. 手动检查权限并返回自定义结果

如果只需要给这个特定Action自定义401消息,可以在方法内手动验证用户角色,不满足时直接返回带消息的401结果:

[HttpGet]
// 移除默认Authorize的自动401触发,改为手动检查
public async Task<IActionResult> GetAllBlogsAsync()
{
    // 手动验证用户是否拥有reader角色
    if (!User.IsInRole("reader"))
    {
        // 返回带自定义消息的401响应
        return new ObjectResult("401 UnAuthorized") 
        { 
            StatusCode = StatusCodes.Status401Unauthorized 
        };
        // 或者更简洁的写法:
        // return Unauthorized("401 UnAuthorized");
    }

    // 原有业务逻辑
    var blogs = await blogRepository.GetAllAsync();
    var blogsDTO = mapper.Map<List<Models.DTO.Blog>>(blogs);
    return Ok(blogsDTO);
}

2. 全局配置认证事件统一自定义401响应

如果希望所有被[Authorize]保护的接口都返回统一的自定义401消息,可以在认证配置中修改Challenge事件(以JWT认证为例,.NET 6+ Program.cs):

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        // 你的JWT配置(如Authority、Audience等)
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            // ...其他验证参数
        };

        // 自定义Challenge事件响应
        options.Events = new JwtBearerEvents
        {
            OnChallenge = context =>
            {
                // 阻止框架默认的401响应
                context.HandleResponse();
                
                // 设置状态码和自定义消息
                context.Response.StatusCode = StatusCodes.Status401Unauthorized;
                context.Response.ContentType = "text/plain";
                return context.Response.WriteAsync("401 UnAuthorized");
            }
        };
    });

这种方式下,保留控制器上的[Authorize(Roles = "reader")]属性即可,当认证/授权失败时,会自动触发自定义的401响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:55:26