ASP.NET Web API调用HttpClient.PostAsync本地接口无法步进调试问题
操作步骤
跨进程网络请求无法直接通过F11步进调试,你需要按以下流程操作:
- 首先确认IIS部署的目标Web API项目是Debug模式编译部署的,IIS站点根目录下bin文件夹内的dll和pdb文件必须是Debug版本,Release版本的编译优化会导致断点无法命中,你之前把pdb复制到单元测试目录的操作没有作用,可以删除。
- 切换到打开目标Web API解决方案的VS窗口,点击顶部菜单栏「调试」->「附加到进程」,勾选窗口底部的「显示所有用户的进程」,找到名为
w3wp.exe的进程(如果有多个,通过「用户名」列匹配IIS站点对应的应用程序池名称,或通过「命令行」列匹配站点部署路径即可),选中后点击「附加」,附加成功后在目标Get接口方法的第一行打好断点。 - 切换回单元测试所在的VS窗口,正常调试到
client.PostAsync所在行时按F10跳过该行(不要按F11,否则只会进入HttpClient的内部实现逻辑),此时请求已经发送到IIS站点,切换到目标Web API的VS窗口即可看到断点已经命中。
常见问题排查
- 如果找不到
w3wp.exe进程:先通过浏览器/Postman调用一次IIS部署的/testapi/getdata接口,触发IIS启动工作进程后再重新打开附加进程窗口即可。 - 如果断点显示为空心未命中状态:在目标VS窗口点击「调试」->「选项」->「符号」,勾选「Microsoft符号服务器」,点击「加载所有符号」等待加载完成后断点就会变为可命中状态。
可选更简便方案
无需将目标Web API部署到IIS,直接在打开目标解决方案的VS窗口选中Web API项目,按Ctrl+F5启动自托管运行(或直接按F5启动调试,VS会自动附加到对应进程),拿到本地运行的端口地址后替换单元测试中HttpClient的BaseAddress为该本地地址,后续调试只要打好目标接口的断点,单元测试发送请求后就会自动命中。
内容的提问来源于stack exchange,提问作者Joseph
相关产品推荐
相关产品推荐

