Я пытаюсь показать пользователю ошибки проверки модели и другие сообщения от веб-API ASP.NET Core 2.1 контроллера.
Это действие POST
[HttpPost("[action]")]
public IActionResult Create([FromBody]Hit hit)
{
try
{
if (hit == null)
return BadRequest("Hit object is null");
if (!ModelState.IsValid)
return BadRequest("Invalid model object");
var newHit = _hitRepository.Add(hit);
return Ok(newHit);
}
catch (Exception ex)
{
return ex.InnerException.Message.Contains("duplicate key")
? BadRequest($"Et Hit med søgeretningen {hit?.SearchDirection} og ordet {hit?.SearchWord} findes allerede")
: StatusCode(500, "Internal server error");
}
}
Мыесть все обычные подозреваемые.Проверка модели и обработка ошибок.
В Angular у меня есть сервис с методом post
create(hit: Hit): Observable<Hit> {
return this.httpClient.post<Hit>(
`${environment.apiUrl}/${this.hitRoute}/create`,
hit
);
}
Я играл с функцией pipe и catchError, но безуспешно
create(hit: Hit): Observable<Hit> {
return this.httpClient.post<Hit>(
`${environment.apiUrl}/${this.hitRoute}/create`, hit)
.pipe(
catchError((error: HttpErrorResponse) => {
return new ErrorObservable(
`Fejl ved oprettelse af nyt Hit. ${error.message || 'Unknown'} `
);
})
);
}
Компонент Angular имеет функцию создания, использующую службу
addWordToHits() {
const hit = {
searchDirection: this.selectedBook,
searchWord: this.selectedItem.word
} as Hit;
this.hitService.create(hit).subscribe(
(data: Hit) => {
this.messageService.add({
severity: 'success',
summary: 'Hit oprettet',
detail: data.searchWord
});
},
(err: HttpErrorResponse) => {
this.messageService.add({
severity: 'error',
summary: 'Hit kunne ikke oprettet',
detail: err.message
});
}
);
}
Сообщение об ошибке сведений не от HttpClient, а от RxJs:
"Observable_1.Observable.throw is not a function"
Я знаюэто потому, что поток прерывается неправильным запросом, а не потоком данных.Но как правильно показывать сообщения с сервера пользователю?
Существует множество руководств по созданию полноценного приложения CRUD с Angular
Это наиболее распространенная проблема, так как же выглядит реальный угловой сервис?
Это то, что у меня сейчас