问题描述
func loginUser(for email: String,password: String,completed: @escaping (Result<LoginModel,Error>) -> Void) {
let endpoint = baseURL + "login"
guard let url = URL(string: endpoint) else {
completed(.failure(.invalidURL))
return
}
var request = URLRequest(url: url)
request.httpMethod = "POST"
let body = ["email": email,"password": password]
let jsonData = try? JSONSerialization.data(withJSONObject: body)
request.httpBody = jsonData
let task = URLSession.shared.dataTask(with: request) { data,response,error in
if let _ = error {
completed(.failure(.unabletoComplete))
return
}
guard let response = response as? HTTPURLResponse,response.statusCode == 200 else {
completed(.failure(.unabletoComplete))
return
}
guard let data = data else {
completed(.failure(.invalidData))
return
}
do {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let data = try decoder.decode(LoginModel.self,from: data)
completed(.success(data))
} catch {
completed(.failure(.invalidData))
}
}
task.resume()
}
但是我尝试登录用户(电子邮件和密码)我得到一个状态代码 401,这是检查响应时的所有信息。
NetworkManager.shared.loginUser(for: emailTextField.text!,password: passwordtextField.text!) { result in
switch result {
case .success(let data):
print(data)
case .failure(let error):
print(error.rawValue)
}
}
<NSHTTPURLResponse: 0x60000181ca80> { URL: https://basee-url/api/login } { Status Code: 401,Headers {
"Access-Control-Allow-Origin" = (
"*"
);
"Cache-Control" = (
"no-cache,private"
);
Connection = (
"keep-alive"
);
"Content-Type" = (
"application/json"
);
Date = (
"Mon,21 Jun 2021 20:11:46 GMT"
);
Server = (
Apache
);
"transfer-encoding" = (
Identity
);
Via = (
"1.1 vegur"
);
"X-Ratelimit-Limit" = (
60
);
"X-Ratelimit-Remaining" = (
59
);
} }
这是在 Postman 中执行的请求
解决方法
我把问题的解决方案留在这里。 Swift 代码的问题在于请求没有设置应用程序/杰森标题。因为我发的是json格式的body。
Into sam_can.h
class SAM_CAN
{
public:
private:
static uint32_t can_msg_ram[MSG_RAM_SIZE] __attribute__((section(".canram")));
};
cam_can.cpp
enum can_status SAM_CAN::begin()
{
struct can_config can_cfg = {
id :
_canid,// Peripheral ID
regs :
#ifndef ID_CAN1
CAN0,// Offset to registers
#else
((_canid == ID_CAN0) ? CAN0 : CAN1),// Offset to registers,switch between CAN0 and CAN1
#endif
msg_ram :
can_msg_ram,// Pointer to start of Canram
....
};
方法添加了这一行
loginUser