Как можно получить ответ в формате текста из 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`, будет получен и выведен в консоли на стороне клиента.
Всем спасибо! Наковырял решение. <br/> Если нет ошибки сервера, то при любом статусном коде отправляется определенный ответ. <br/> <pre><code class="cs">return StatusCode(400, new { message = "Ошибка" });</code></pre> <br/> <br/> <pre><code class="javascript">fetch(url, {
     credentials: 'include'
}).then((response) =&gt; {
     return response.json()
}).then((data) =&gt; {
     if (!data.message) {
          //Обработка ответа
     } else {
          console.log(data.message);
     }
})</code></pre>
Основным методом общения между клиентом и сервером являются <code>Status Code</code> . Зачем вам передавать точное описание, что там оно не нашло, если вы можете просто передавать <code>404</code> и клиент пусть сам генерирует себе ошибку. <br/> <br/> Вообще забудьте про этот бред <code>return StatusCode</code> . Есть нормальные методы <code>StatusResult</code> к которым относятся <code>Ok()</code> , <code>BadRequest()</code> и тот же <code>NotFound()</code> . В эти методы можете передавать какие-то <b>мета-данные</b> если вам нужно. Либо можете использовать <code>Response.Headers</code> . Но если вам прям очень-очень нужно впихнуть туда вот это вообще об ошибке, так что бы ваш сервер был <i>на все руки мастер</i> , можете сделать что-то типа такого: <br/> <br/> <pre><code class="cs">return NotFound(new { message = "Omg, Not Found!!!" });</code></pre> <br/> <br/> <b>UPD:</b> <br/> Как на клиенте через <code>JS</code> вытянуть ошибку? Я бы использовал просто <code>ajax</code> : <br/> <br/> <pre><code class="javascript">$.ajax({
    url: '...',
    method: 'get',
    success: (response): {
        let data = JSON.parse(response.responseText);
        console.log(data.message); //Omg, Not Found!!!
    }
});</code></pre>
<blockquote>Как в случае ошибки получить данный текст ("Совпадений не найдено") на стороне клиента, с помощью JS?</blockquote> <br/> - <a href="https://developer.mozilla.org/en-US/docs/Web/API/fetch" rel="nofollow">fetch()</a> <br/> - <a href="https://github.com/axios/axios" rel="nofollow">Axios</a> <br/> <br/> fetch(): <br/> <pre><code class="javascript">fetch('//site.com/api/v1/send')
    .then((response) =&gt; {
        // error handler
        if (!response.ok) {
            return response.text().then((text) =&gt; throw new Error(text));
        }

        return response.json();
    })

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