当前位置: 首页 > news >正文

c#接口请求报错

目录

一、场景

Blazor Server 开发

二、解决办法

解法 A

解法 B

三、总结


一、场景

Blazor Server 开发

        今天遇见使用HttpClient 进行本地json文件请求时候报错 System.Net.Http.HttpRequestException:“Response status code does not indicate success: 502 (Bad Gateway).”

        502(Bad Gateway)多数不是 JSON 文件的问题,而是Blazor Server 里用 HttpClient 去“再走一遍网关/反向代理访问自己”出了岔子(端口/协议不一致、IIS Express/Kestrel 转发异常、开发证书/HTTP2 协议等都可能触发 502)。最稳的办法:别走 HTTP,再访问磁盘即可

二、解决办法

解法 A

(推荐,Blazor Server):直接从 wwwroot 读文件,不走网络,自然不会 502

@using System.Text.Json
@using System.IO
@inject IWebHostEnvironment Env@code {private MenuDataItem[] _menuData = Array.Empty<MenuDataItem>();protected override async Task OnInitializedAsync(){var path = Path.Combine(Env.WebRootPath, "data", "menu.json"); // wwwroot/data/menu.jsonawait using var fs = File.OpenRead(path);_menuData = await JsonSerializer.DeserializeAsync<MenuDataItem[]>(fs, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }) ?? Array.Empty<MenuDataItem>();}
}

解法 B

把“自己调自己”的不确定性降到最低:

  • Program.cs(Blazor Server)把 HttpClientBaseAddress 绑定到站点实际地址,并强制 HTTP/1.1(规避某些反代的 HTTP/2 502):
builder.Services.AddScoped(sp =>
{var nav = sp.GetRequiredService<NavigationManager>();var handler = new HttpClientHandler{// 开发环境可临时忽略证书(仅开发用!)ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator};return new HttpClient(handler){BaseAddress = new Uri(nav.BaseUri),DefaultRequestVersion = new Version(1, 1)};
});
  • 组件里用绝对地址(由 NavigationManager 拼出来,确保协议/端口一致)并加上异常日志:
@inject HttpClient Http
@inject NavigationManager Nav@code {private MenuDataItem[] _menuData = Array.Empty<MenuDataItem>();protected override async Task OnInitializedAsync(){try{var url = new Uri(new Uri(Nav.BaseUri), "data/menu.json");_menuData = await Http.GetFromJsonAsync<MenuDataItem[]>(url, new System.Text.Json.JsonSerializerOptions { PropertyNameCaseInsensitive = true }) ?? Array.Empty<MenuDataItem>();}catch (Exception ex){Console.WriteLine($"加载菜单失败:{ex}");_menuData = Array.Empty<MenuDataItem>();}}
}

另外确认:app.UseStaticFiles(); 已在 Program.cs 的中间件管线里;浏览器能直接打开 http(s)://<你的端口>/data/menu.json 说明这步没问题。

三、总结

结论:在 Blazor Server 场景,优先用“解法 A 直接读文件”。如果必须用 HttpClient,就按“解法 B”把 BaseAddress 绑定到 Nav.BaseUri、强制 HTTP/1.1,并在开发环境放宽证书校验,基本就不会再见到 502 了。

http://www.dtcms.com/a/532706.html

相关文章:

  • Linux小课堂: 网络接口与连接监控命令详解
  • 做网站九州科技汕头网站建设浩森宇特
  • GitHub等平台形成的开源文化正在重塑可以调
  • 流批了,pdf批量转excel
  • GitHub等平台形成的开源文化正在重塑家庭日快
  • 怎么在搜索引擎做网站登记metropro wordpress
  • Appium 手机自动化控制教程
  • 节流(throttle) 是一种优化高频触发事件的技术
  • 免费空间域名可以做淘宝客网站推广吗优秀网站开发公司
  • 决策树(ID3、C4.5与CART)——从信息增益、信息增益率到基尼系数
  • 图神经网络在观点动力学中的应用
  • SQL学习之常用的数据库命令和基础查询
  • 做爰网站1000部扬中营销网站建设
  • 优化网页性能指标:提升用户体验的关键
  • 淮北矿业工程建设公司网站wordpress如何做拼团
  • rust更新后编译的exe文件执行报错
  • 申请网站建设费人们常用的网页设计工具是
  • 琵琶行论坛GBA、MD、SFC、FC、PS1、PS2 HACK修改版中文游戏全集下载
  • 【AI大模型】Function Calling接口介绍
  • 公司做英文网站wordpress怎么解压
  • 从网站下载壁纸做海报涉及网站标签化
  • 诚信档案建设网站首页推广目标怎么写
  • UE5 蓝图-21:主 mainUI 界面蓝图,颜色按钮蓝图 Ul_colorsUl 的内容,尺寸,事件分发器还有赋予按钮形状的环状材质
  • 安卓开发玩转JetPack之Room的使用
  • e龙岩网站网站建设外包公司
  • 做的图怎么上传到网站google play应用商店
  • 图书馆网站建设拖拽网站开发
  • CSS ::before 和 ::after 伪元素详解
  • 网站gif素材wap音乐网站源码
  • Gorm(九)嵌套预加载、带条件预加载(防止 N+1)