尽管 Fiddler 显示收到了正确的响应,但 Blazor WASM 上的 HttpClient.SendAsync 返回空 HttpResponseMessage

Posted

技术标签:

【中文标题】尽管 Fiddler 显示收到了正确的响应,但 Blazor WASM 上的 HttpClient.SendAsync 返回空 HttpResponseMessage【英文标题】:HttpClient.SendAsync on Blazor WASM returns empty HttpResponseMessage although Fiddler shows that correct response was received 【发布时间】:2021-10-25 00:03:59 【问题描述】:

我的 Blazor 页面代码:

private async Task OnSendSMSClick()
    
        var request = new HttpRequestMessage(HttpMethod.Post, baseAddress);
        request.SetBrowserRequestMode(BrowserRequestMode.NoCors);
        request.SetBrowserRequestCache(BrowserRequestCache.NoCache);
        HttpContent content = new FormUrlEncodedContent(new[]
            
                new KeyValuePair<string, string>("client_id", client_id),
                new KeyValuePair<string, string>("client_secret", client_secret)
            );
        content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
        request.Content = content;
        RequestOutput = request.ToString();

        HttpResponseMessage response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseContentRead);
        
        ResponseOutput = response.StatusCode.ToString();
    

response 总是返回空,尽管我在 Fiddler 上看到返回了实际结果。在 Google Chrome 上,我看到服务器以正确的标头响应 200,但不知何故 Chrome 显示“加载响应数据失败”。

Chrome 上没有错误,我收到 200 响应,但不知何故无法显示响应内容:

而且你可以在调试器中看到响应对象是空的..

我该如何解决这个问题,我在这里缺少什么?

谢谢!

【问题讨论】:

【参考方案1】:

Blazor 在需要 CORS (source) 的网站上存在问题。

很遗憾,在 Blazor 客户端上无能为力。 我找到的唯一解决方案是 disable CORS on the server 或在 Blazor 之外设置代理服务器。

【讨论】:

以上是关于尽管 Fiddler 显示收到了正确的响应,但 Blazor WASM 上的 HttpClient.SendAsync 返回空 HttpResponseMessage的主要内容,如果未能解决你的问题,请参考以下文章

JWT 令牌似乎是正确的,但收到的响应是 401

尽管我使用了有效的令牌,但 Laravel Passport 得到未经身份验证的响应

使用元标记设置缓存标头:始终在缓存控制响应中获取“私有”

[B]Fiddler02-菜单功能介绍

尽管在 React 中更新了状态,但方法没有获得正确的 useState 值

尽管响应为 200,但 Axios 状态为 449