В Blazor работают неожиданные результаты с веб-сервера API - PullRequest
0 голосов
/ 07 апреля 2020

Я разрабатываю довольно простое приложение Blazor, использующее множество стандартных шаблонных функций, и я не могу понять, как обработать ActionResult с сервера, который не является нормальным возвращаемым значением.

На стороне сервера я немного изменил шаблон контроллера по умолчанию, чтобы он выглядел примерно так:

    public async Task<ActionResult<MyData>> GetSession(int id)
    {
        var myData= await FetchMyData(id);

        if (myData== null)
        {
            return NotFound();
        }
        return myData;
    }

Эта проверка на нулевое значение была в исходном шаблоне - кажется хорошей идеей, поэтому я сохранил ее , На стороне клиента мой код выглядит так:

    public async Task<MyData> GetMyData(int id)
    {
        return await Http.GetJsonAsync<MyData>("/api/MyData/" + id);
    }

Все это работает довольно хорошо, за исключением того, что код на стороне клиента не обрабатывает случай, когда сторона сервера возвращает результат "NotFound ()". Это не остановка показа, но это сводит меня с ума, потому что я не знаю, как это сделать.

Кажется, что вызов GetJsonAsyn c () на клиенте молча разворачивает возвращаемое значение из Оболочка ActionResult (наверное?). Означает ли это, что если я хочу обработать условие NotFound, мне следует использовать другую функцию httpclient и, возможно, самостоятельно десериализовать объект Value? Если да, то кто-нибудь хочет предложить пример?

Или я что-то упустил, и есть более простой способ?

Кажется глупым проверять условие на стороне сервера, чтобы просто отправить клиенту предупреждение, которое в конечном итоге приводит к необработанному исключению.

1 Ответ

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

Я попытался предложить Хенку Холтерману просто добавить try / catch, и оказалось, что выброшенное исключение содержало информацию, которую я хотел - это статус, возвращаемый сервером. Так что я должен был сделать следующее:

public async Task<MyData> GetMyData(int id)
{
    try
    {
        return await Http.GetJsonAsync<MyData>("/api/MyData/" + id);
    }
    catch (System.Net.Http.HttpRequestException e)
    {
        .... process the exception
    }
}

Оказывается, HttpRequestException имеет HResult, который я и искал.

Спасибо, Хенк.

...