您可以通过以下方式修改代码,以返回401未授权状态码和错误消息而不是抛出异常:
public async Task Invoke(HttpContext httpContext)
{
string authHeader = httpContext.Request.Headers["Authorization"];
string token = authHeader?.Replace("Bearer ", "");
if (!string.IsNullOrEmpty(token))
{
var tokenHandler = new JwtSecurityTokenHandler();
var validationParameters = new TokenValidationParameters()
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["JWTSecret"])),
ValidateIssuer = false, // 根据需要进行配置
ValidateAudience = false // 根据需要进行配置
};
try
{
var principal = tokenHandler.ValidateToken(token, validationParameters, out _);
httpContext.User = principal;
}
catch (Exception ex)
{
httpContext.Response.StatusCode = 401;
await httpContext.Response.WriteAsync("Unauthorized"); // 返回未授权状态码和提示消息
return;
}
}
await _next(httpContext);
}
以上代码在验证过程中如果出现异常,则会设置HTTP响应的状态码为401(未授权),并返回”Unauthorized”提示消息。注意要将方法声明为async Task
以支持异步操作,并使用await
关键字等待中间件链的下一个委托调用。
内容由零声教学AI助手提供,问题来源于学员提问