我试图将localhost:4200上的Angular4数据发布到localhost:8000上的API。我和Postman合作得很好,但是和Angular不一样。然后我得到:
无法加载资源:服务器响应状态为422(不可处理实体)
这是发布到api的服务:
@Injectable()
export class ApiService {
constructor(private http: Http) { }
login(username: string, password: string): Observable<Response>{
const url = 'http://localhost:8000/login';
const json = JSON.stringify({username: username, password: password});
const headers: Headers = new Headers();
headers.append('Content-Type', 'application/json; charset=UTF-8');
return this.http.post(url, json, headers )
.map(res => res.json());
}
}
这是运行方法的代码
logIn(user: string, password: string){
this.apiService.login(user, password).subscribe(
data => console.log(data),
error => console.log(error)
);
}
答案 0 :(得分:1)
422(不可处理实体)状态代码表示服务器 了解请求实体的内容类型(因此a 415(不支持的媒体类型)状态代码不合适),和 请求实体的语法是正确的(因此是400(错误请求) 状态代码不合适但是无法处理包含的内容 指令。
例如,如果XML请求主体包含格式正确(即语法正确)但语义错误的XML指令,则可能会出现此错误情况。
答案 1 :(得分:1)
使用“ angular-in-memory-web-api”时,我也遇到同样的问题。问题是在创建InMemoryDbService时,我没有添加ID之类的主键。在createDb实例中添加ID后,对我来说一切正常。
import { Injectable } from '@angular/core';
import { InMemoryDbService } from 'angular-in-memory-web-api';
@Injectable({
providedIn: 'root'
})
export class DataService implements InMemoryDbService {
constructor() { }
createDb() {
let users = [
{**id: 1**, username: "Sandy", firstname: "Sandesh", lastname: "K", password:
"XXXX", description: "Hi, Going to save data", gender: "Male" }
];
return { users };
}
}