在Blazor中处理来自api Web服务器的意外结果

问题描述 投票:0回答:1

我正在使用许多默认模板功能来开发一个相当简单的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()”结果的情况。这不是表演的制胜法宝,但令我发疯,因为我不知道该怎么做。

似乎客户端上的GetJsonAsync()调用正在默默地从ActionResult包装器中包装返回值(我想是吗?)。这是否意味着如果我想处理NotFound条件,我应该使用其他的httpclient函数,并且可能自己反序列化Value对象?如果是这样,那么有人愿意做一个榜样吗?

或者我错过了什么,还有更简单的方法吗?

[在服务器端检查条件只是向客户端发送警告,最终导致未处理的异常,这似乎很愚蠢。

.net core blazor
1个回答
1
投票

我尝试了Henk Holterman的建议,即只添加一个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,这就是我想要的。

感谢Henk。

© www.soinside.com 2019 - 2024. All rights reserved.