在ReactJS和ASP.NET Core 6 API中处理过期令牌响应的POST调用,你可以使用Axios的拦截器来捕获和处理过期令牌的响应。以下是一个示例代码:
在ReactJS中的API请求文件中,可以创建一个Axios实例并添加拦截器:
import axios from 'axios';
const api = axios.create({
baseURL: 'https://api.example.com',
});
// 添加响应拦截器
api.interceptors.response.use(
response => response,
error => {
const originalRequest = error.config;
// 处理过期令牌的响应
if (error.response.status === 401 && !originalRequest._retry) {
originalRequest._retry = true;
// 在此处刷新令牌,示例中使用refreshToken进行刷新
return api.post('/refreshToken', {
token: refreshToken,
})
.then(res => {
if (res.status === 200) {
// 刷新令牌成功,将新的令牌存储在本地
localStorage.setItem('accessToken', res.data.accessToken);
// 更新原始请求的Authorization头
originalRequest.headers['Authorization'] = 'Bearer ' + res.data.accessToken;
// 重新发送原始请求
return api(originalRequest);
}
});
}
return Promise.reject(error);
}
);
export default api;
在ASP.NET Core 6 API中的控制器中,你可以使用[Authorize]特性来标记需要授权的方法,并在过期令牌的情况下返回401 Unauthorized响应。以下是一个示例代码:
[Authorize]
[ApiController]
[Route("api/[controller]")]
public class ExampleController : ControllerBase
{
// POST: api/example
[HttpPost]
public IActionResult Post([FromBody] ExampleModel model)
{
// 检查令牌是否过期
if (!User.Identity.IsAuthenticated)
{
return Unauthorized();
}
// 处理POST请求
// ...
return Ok();
}
}
这样,当POST调用遇到过期令牌的情况时,Axios的拦截器会自动刷新令牌并重新发送原始请求,从而解决了过期令牌的问题。在ASP.NET Core 6 API中,你可以使用[Authorize]特性来标记需要授权的方法,并在过期令牌的情况下返回401 Unauthorized响应。