Как можно получить ответ в формате текста из ASP.NET Core API?

Как можно получить текст ошибки ("Совпадений не найдено"), отправленный методом контроллера API с помощью `StatusCode` в ASP Net Core из JS на стороне клиента?
  • 28 марта 2024 г. 8:59
Ответы на вопрос 4
Для того чтобы получить ответ в формате текста из ASP.NET Core API можно воспользоваться следующим кодом:

```csharp
[HttpGet]
public IActionResult Get()
{
    return Ok("Привет, мир!"); // Отправляем ответ в формате текста
}
```

А чтобы получить текст ошибки, отправленный методом контроллера API с помощью `StatusCode`, в ASP Net Core из JS на стороне клиента, можно использовать следующий пример кода:

ASP.NET Core API:

```csharp
[HttpGet]
public IActionResult Get()
{
    return StatusCode(404, "Совпадений не найдено"); // Отправляем текст ошибки с кодом 404
}
```

JS на стороне клиента:

```javascript
fetch('https://localhost:5001/api/yourControllerName')
  .then(response => {
    if (!response.ok) {
      return response.text().then(text => {
        console.error(text); // Выводим текст ошибки в консоль
      });
    }
    return response.text();
  })
  .then(data => {
    console.log(data); // Выводим полученные данные в консоль
  })
  .catch(error => {
    console.error('Ошибка:', error);
  });
```

При выполнении данного кода, текст ошибки "Совпадений не найдено", отправленный из контроллера API с помощью `StatusCode`, будет получен и выведен в консоли на стороне клиента.
Всем спасибо! Наковырял решение. 
Если нет ошибки сервера, то при любом статусном коде отправляется определенный ответ.
return StatusCode(400, new { message = "Ошибка" });


fetch(url, {
     credentials: 'include'
}).then((response) => {
     return response.json()
}).then((data) => {
     if (!data.message) {
          //Обработка ответа
     } else {
          console.log(data.message);
     }
})
Основным методом общения между клиентом и сервером являются Status Code . Зачем вам передавать точное описание, что там оно не нашло, если вы можете просто передавать 404 и клиент пусть сам генерирует себе ошибку. 

Вообще забудьте про этот бред return StatusCode . Есть нормальные методы StatusResult к которым относятся Ok() , BadRequest() и тот же NotFound() . В эти методы можете передавать какие-то мета-данные если вам нужно. Либо можете использовать Response.Headers . Но если вам прям очень-очень нужно впихнуть туда вот это вообще об ошибке, так что бы ваш сервер был на все руки мастер , можете сделать что-то типа такого:

return NotFound(new { message = "Omg, Not Found!!!" });


UPD:
Как на клиенте через JS вытянуть ошибку? Я бы использовал просто ajax :

$.ajax({
    url: '...',
    method: 'get',
    success: (response): {
        let data = JSON.parse(response.responseText);
        console.log(data.message); //Omg, Not Found!!!
    }
});
Как в случае ошибки получить данный текст ("Совпадений не найдено") на стороне клиента, с помощью JS?

- fetch()
- Axios

fetch():
fetch('//site.com/api/v1/send')
    .then((response) => {
        // error handler
        if (!response.ok) {
            return response.text().then((text) => throw new Error(text));
        }

        return response.json();
    })

    .then((data) => console.log('Свежая инфа: ', data))
    .catch((error) => console.error('ОшибкО:', error.message));
Похожие вопросы