服务无法到达 post 函数
Service can't reach post function
嘿(第一次 post 来这里所以我可能会违反一些规则,如果我违反了请告诉我),
我正在尝试创建一个 Rest API,但我遇到了一些问题。
事实上,post 函数不会在 C# API 上触发,我不知道为什么与 getAll() 函数一起使用的 GET 函数 运行 很好。
Angular 服务:
public GetAll = (): Observable<Expertise[]> => {
return this.http.get(this.actionUrl, '').map((response: Response) => <Expertise[]>response.json());
}
public Add = (thingToAdd: Expertise): Observable<Expertise> => {
thingToAdd.Id = 1;
let toAdd = JSON.stringify(thingToAdd);
console.log(toAdd);
console.log(this.actionUrl);
return this.http.post(this.actionUrl, toAdd, { headers: this.headers
}).map((response: Response) => response.json());
}
C#API:
// GET api/values
[HttpGet]
public async Task<IEnumerable<Expertise>> Get()
{
try
{
System.Console.WriteLine("Test get all");
//var result = await cvService.Get("toto@azeo.com");
return new List<Expertise>();
}
catch (System.Exception ex)
{
logger.LogError(ex.Message, ex);
throw;
}
}
// POST api/values
[HttpPost]
public Expertise Post([FromBody]Expertise expertise)
{
try
{
System.Console.WriteLine("Test post");
context.Expertises.Add(expertise);
context.SaveChanges();
logger.LogInformation("New expertise added !");
return expertise;
}
catch (System.Exception ex)
{
logger.LogError(ex.Message, ex);
throw;
}
}
专业知识(EF 模型):
public class Expertise
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public ICollection<ExpCV> CVs { get; set; }
}
如果有人对 "link" 服务有想法,请告诉我 API,我已经坚持了很长时间。
提前致谢
由于您的服务 returns 和 observable
实际的 GET
和 POST
请求不会发生,直到您订阅该可观察对象。
看看我设置的这个插件:
plunker: https://plnkr.co/edit/r6aBaB3BjJzdIS4myAd8?p=preview
代码:
@Component({
selector: 'app',
template: `
<button (click)="searchNoSub()">searchNoSub</button>
<button (click)="search()">search</button>
`
})
export class App {
constructor(private searchService:SearchService) {
}
search(){
this.searchService.search().subscribe(console.log,console.log)
}
searchNoSub(){ this.searchService.search(); }
}
搜索服务:
@Injectable()
export class SearchService {
constructor(private http: Http) {}
search(term: string) {
// get artists named john from spotify API
return this.http.get('https://api.spotify.com/v1/search?q=john&type=artist')
.map((response) => response.json());
}
}
现在打开您的开发工具和 chrome 中的 network
选项卡以查看新请求:
单击 searchNoSub
时,您会发现网络选项卡中未注册任何请求。
单击 search
按钮时,您会看到一个请求,因为我们已订阅。
简而言之,您需要订阅可观察到的请求。
嘿(第一次 post 来这里所以我可能会违反一些规则,如果我违反了请告诉我),
我正在尝试创建一个 Rest API,但我遇到了一些问题。 事实上,post 函数不会在 C# API 上触发,我不知道为什么与 getAll() 函数一起使用的 GET 函数 运行 很好。
Angular 服务:
public GetAll = (): Observable<Expertise[]> => {
return this.http.get(this.actionUrl, '').map((response: Response) => <Expertise[]>response.json());
}
public Add = (thingToAdd: Expertise): Observable<Expertise> => {
thingToAdd.Id = 1;
let toAdd = JSON.stringify(thingToAdd);
console.log(toAdd);
console.log(this.actionUrl);
return this.http.post(this.actionUrl, toAdd, { headers: this.headers
}).map((response: Response) => response.json());
}
C#API:
// GET api/values
[HttpGet]
public async Task<IEnumerable<Expertise>> Get()
{
try
{
System.Console.WriteLine("Test get all");
//var result = await cvService.Get("toto@azeo.com");
return new List<Expertise>();
}
catch (System.Exception ex)
{
logger.LogError(ex.Message, ex);
throw;
}
}
// POST api/values
[HttpPost]
public Expertise Post([FromBody]Expertise expertise)
{
try
{
System.Console.WriteLine("Test post");
context.Expertises.Add(expertise);
context.SaveChanges();
logger.LogInformation("New expertise added !");
return expertise;
}
catch (System.Exception ex)
{
logger.LogError(ex.Message, ex);
throw;
}
}
专业知识(EF 模型):
public class Expertise
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public ICollection<ExpCV> CVs { get; set; }
}
如果有人对 "link" 服务有想法,请告诉我 API,我已经坚持了很长时间。
提前致谢
由于您的服务 returns 和 observable
实际的 GET
和 POST
请求不会发生,直到您订阅该可观察对象。
看看我设置的这个插件:
plunker: https://plnkr.co/edit/r6aBaB3BjJzdIS4myAd8?p=preview
代码:
@Component({
selector: 'app',
template: `
<button (click)="searchNoSub()">searchNoSub</button>
<button (click)="search()">search</button>
`
})
export class App {
constructor(private searchService:SearchService) {
}
search(){
this.searchService.search().subscribe(console.log,console.log)
}
searchNoSub(){ this.searchService.search(); }
}
搜索服务:
@Injectable()
export class SearchService {
constructor(private http: Http) {}
search(term: string) {
// get artists named john from spotify API
return this.http.get('https://api.spotify.com/v1/search?q=john&type=artist')
.map((response) => response.json());
}
}
现在打开您的开发工具和 chrome 中的 network
选项卡以查看新请求:
单击 searchNoSub
时,您会发现网络选项卡中未注册任何请求。
单击 search
按钮时,您会看到一个请求,因为我们已订阅。
简而言之,您需要订阅可观察到的请求。