我试图找出一个看起来非常混乱的问题,为什么我不能在我的react native应用程序中获得我的API返回的jwt,但它在postman中工作正常?
这是我的服务器端
[HttpPost("login")]
public async Task<ActionResult<string>> Login(UserLoginDto request)
{
// Check if exist
var existingUser = _dbContext.Users.FirstOrDefault(u => u.Username == request.Username);
if (existingUser == null)
{
return BadRequest("User not found");
}
if (!VerifyPasswordHash(request.Password, existingUser.PasswordHash, existingUser.PasswordSalt))
{
return BadRequest("Wrong password");
}
string token = CreateToken(existingUser);
return Ok(token);
}
下面是我的react native客户端
Login = async (user: UserLoginDTO) => {
try {
console.log(API + "/auth/login")
const response = await fetch(API + "/auth/login", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(user)
});
if (!response.ok) {
throw new Error('Failed to login user');
}
// console.log(JSON.stringify(response, null, 2))
console.log(response.json())
}
catch (error){
console.log('Handled Error When Login:', error);
}
}
当我使用postman时,它工作正常,我得到了我的令牌:
"eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTUxMiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoic2hhZHkyIiwiZXhwIjoxNjgxNjg0NTg4fQ.DHFSqUs8LKWzyFtQLLh_DqniaaLU13CFap_ABHydQovjAszQh1x98bbghcl8w9OipH_GsHx7PwWKio92us5gFg"
但是当我从我的javascript端获取时,这里是我得到的响应:
{
"type": "default",
"status": 200,
"ok": true,
"statusText": "",
"headers": {
"map": {
"content-type": "application/json; charset=utf-8",
"date": "Sat, 15 Apr 2023 22:31:42 GMT",
"server": "Kestrel",
"transfer-encoding": "Identity"
}
},
"url": "http://localhost:5001/auth/login",
"bodyUsed": false,
"_bodyInit": {
"_data": {
"size": 312,
"offset": 0,
"blobId": "8CC8111D-B26B-4C09-A03B-3E6D8439B7EB",
"type": "application/json",
"name": "login.json",
"__collector": {}
}
},
"_bodyBlob": {
"_data": {
"size": 312,
"offset": 0,
"blobId": "8CC8111D-B26B-4C09-A03B-3E6D8439B7EB",
"type": "application/json",
"name": "login.json",
"__collector": {}
}
}
}
我不明白发生了什么,为什么这和 Postman 不一样?
2条答案
按热度按时间vx6bjr1n1#
我通过简单地使用response.text()解决了这个问题,这很容易理解,因为API返回的类型是字符串而不是json对象。
谢谢你的回答。
6ie5vjzr2#
response.text()方法和response.json()方法用于从HTTP响应中提取响应正文,但它们在解释响应正文的方式上有所不同。
response.text()以文本字符串的形式返回响应正文。它可用于从响应中提取纯文本,HTML或任何其他非JSON格式。当响应内容类型未知时,或者当您需要提取响应正文中非JSON格式的特定部分时,可以使用此方法。
另一方面,response.json()方法将响应正文解析为JSON并返回JavaScript对象。当已知响应内容类型为JSON时,应使用此方法。它可用于从响应正文中提取任何JSON数据。
因为你的web API没有返回json格式,所以你应该使用text而不是json。