Ответ считывается как ошибка при подписке

#c# #angular #api

#c# #угловой #API

Вопрос:

Я отправляю текстовый ответ из API, но подписка angular 10 считывает его как ошибку, когда она не завершается сбоем.

Редактировать:

Чтобы уточнить, желаемый ответ поступает и понимается в обработчике подписки angulars как ошибка, когда это не ошибка.

РЕДАКТИРОВАТЬ 2, Наконец, ошибка после перезапуска VS введите описание изображения здесь

В postman статус возвращается как двести Ok. Журнал консоли никогда не достигает успеха, но успешный ответ поступает как ошибка. Что я сделал не так?

Служба Angular:

   startSession(session: Session) {
    let sessionForStart = new StartDto(session); // simple mapping so as not take all properties
    return this.http.post(this.baseUrl   '/start', sessionForStart);
  }
  

Угловой:

   startSession(session: Session) {
    const options = {
// some option stuff for dialog removed for brevity
    };

    this.dialog.open(options);

    this.dialog.confirmed().subscribe((confirmed) => {
      if (confirmed) {
        this.sessionService.startSession(session)
            .subscribe(
              data => console.log(data),
              error => this.toastr.error(error)
        );
      }
    });
  }
  

API:

 public async Task<IActionResult> StartSession(Dto dto) 
{
    try
    {
        string sessionResult = await sessionControllerControls.StartSessionController(dto);
            return Ok(sessionResult);
    }
    catch (Exception ex)
    {
        throw new Exception(
            $"Starting failed with the following exception:n{ex.Message}");
    }
}
  

Комментарии:

1. консоль. зарегистрируйте ошибку, чтобы определить причину сбоя.

2. В этом проблема, это не сбой, правильный ответ поступает как ошибка. Обновил вопрос для ясности.

3. является ли код sessionService.startSession(session) прямым или у вас есть какие-либо манипуляции с ответом в нем.?

4. Я обновлю вопрос, но довольно прямолинейно.

5. Спасибо, люди, перезапустил VS, и он ведет себя по-другому, похоже, это ошибка, а также правильный ответ.

Ответ №1:

Вы получаете текст из своего API, а не json. Вот что означает ошибка (неожиданный токен «S» в позиции 0 …). Вы можете указать http ожидать определенный тип ответа, например текст:

 return this.http.post(this.baseUrl   '/start', sessionForStart, {responseType: 'text'});
  

Комментарии:

1. Спасибо, просто смотрел на API, было бы лучше отправить JSON из API вместо этого как JsonResult ?

2. Я недостаточно хорошо разбираюсь в .net, чтобы рассказать вам, как правильно отправить ответ в виде json. Я думаю, что в вашем случае await sessionControllerControls.StartSessionController(dto) возвращается текст. Возможно, вы можете задать другой вопрос по этой теме. приветствия.