Angular не удается разобрать строку из вызова API (веб-ядро 3) - PullRequest
0 голосов
/ 04 апреля 2020

Код контроллера:

 [Route("api/[controller]")]
[ApiController]
public class AjaxController : ControllerBase
{
    ApplicationDbContext dbContext = null;
    public AjaxController(ApplicationDbContext ctx)
    {
        dbContext = ctx;
    }

    [HttpGet]
    [Route("GetString")]
    public string GetString()
    {
        return "Hello World";
    }

    [HttpGet]
    [Route("GetCategories")]
    public Category[] GetCategories()
    {
        return dbContext.Categories.ToArray();
    }
}

Angular код:

http.get<string>(baseUrl + 'api/ajax/GetString').subscribe(result => {
      console.log(result);
    }, error => console.error(error));

Хотя Angular может без ошибок анализировать конечную точку GetCategories, он не может анализировать намного более простую GetString. Почему? Ошибка в консоли:

ошибка: SyntaxError: «JSON .parse: неожиданный символ в строке 1 столбца 1 текста JSON data»: «Hello World»

Я пытался с Почтальоном, и ответ просто отлично, см. Скриншот: screenshot of Postman

1 Ответ

1 голос
/ 04 апреля 2020

Проблема в том, что ваш ответ от GetString возвращает просто строку значения Hello World, как показано на скриншоте из Почтальона. Конечная точка GetCategories должна возвращать действительный JSON, если вы получаете правильный ответ.

По умолчанию Angular предполагает, что тип ответа HttpRequest имеет тип json.

Чтобы исправить это, укажите в качестве второго параметра http.get() ожидаемое от сервера responseType, которое в вашем случае для конечной точки GetString будет 'text'. Таким образом, ваш http.get() вызов должен выглядеть следующим образом:

http.get<string>(baseUrl + 'api/ajax/GetString', { responseType: 'text' }).subscribe(result => {
    console.log(result);
  }, error => console.error(error));

Если вы намеревались вернуть действительный JSON из GetString, то вам необходимо отформатировать ответ с вашего сервера соответствующим образом.

См. Angular документацию по HttpRequest - responseType . Я включил копию ниже.

responseType: 'arraybuffer' | 'blob' | 'json' | 'text'

Ожидаемый тип ответа сервера.

Используется для надлежащего анализа ответа перед возвратом. это запрашивающему.

...