【问题标题】:WebAssembly.JSException: TypeError: Failed to fetch when server does not responseWebAssembly.JSException:TypeError:当服务器没有响应时无法获取
【发布时间】:2020-11-04 13:55:15
【问题描述】:

我想为服务器没有响应的情况编写代码。 我故意关闭后端来模拟这种情况。 HttpClient 抛出 WebAssembly.JSException 带有消息

TypeError: Failed to fetch 

可以吗?

我认为这令人困惑。 我担心如果我依赖这种行为,就会出现问题。 我该如何妥善处理这种情况?

【问题讨论】:

  • 浏览器的控制台有错误吗?
  • 有“WebAssembly.JSException: TypeError: Failed to fetch”
  • 你使用的是http还是https?
  • 我正在使用 https
  • 只使用 http 是否有效?

标签: c# blazor blazor-client-side


【解决方案1】:

以下代码 sn-p 描述了如何对 Web Api 端点执行 HTTP GET 调用,查询指示 HTTP 响应是否成功的 IsSuccessStatusCode 的值。如果成功,则代码检索数据流,将其反序列化为List<Contact>,并将其返回给调用代码。

如果不成功(else 子句),则处理失败...在这里您可以进行任何检查、记录错误、显示消息等。

我想在这里展示的是如何解决您的问题以及其他异常,例如 NotFound ( 404 ) 异常等的方向。

您也可以使用 response.EnsureSuccessStatusCode();在 try/catch 块中并根据您的需要处理异常。

你可以用各种方式来做这一切......

public async Task<List<Contact>> GetContactsAsync()
        {
            var response = await httpClient.GetAsync("api/contacts");
           // response.EnsureSuccessStatusCode();
            if (response.IsSuccessStatusCode)
           {
               // Handle success
                  var responseContent = await response.Content.ReadAsStreamAsync();
            return await JsonSerializer.DeserializeAsync<List<Contact>>(responseContent);
           }
           else
           {
              // Handle failure
           }
            
        }

【讨论】:

  • 如果响应存在,此代码可以完美运行。如果没有代码抛出WebAssembly.JSException.
  • 所以处理异常。正如我上面提到的。解决方案是我在这里提供的方向。我不会为没有代码的问题开出简明的解决方案。只是在哪里寻找解决方案。请注意,您所面临的与 http/https 无关...
  • 我可以处理这个异常,没问题。一个问题是奇怪的HttpClient 行为。我相信它会给我带来一个问题。也许,我应该去 aspnet github 并发布问题吗?
  • 现在您偏离了问题的主要主题...没问题,您也可以在 stackoverflow 和 github 中发布您的问题。不要期望在那里得到更好的答案,即使是来自 asp.net 团队的答案,他们经常将人们重定向到 stackoverflow,除非所讨论的问题显然是 bug 的性质。但是,您应该提供完整的代码仓库,并清楚说明您在做什么以及您希望做什么......
猜你喜欢
  • 2015-06-28
  • 1970-01-01
  • 2019-12-18
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多