如何在WebAssembly中处理ASP.NET Core API的ActionResult状态码?
处理ASP.NET Core API的ActionResult响应
代码实现:如何处理不同状态码
你当前用的GetFromJsonAsync是封装后的快捷方法,它在遇到非2xx状态码时会直接抛出HttpRequestException,没法直接获取响应状态码。要处理OK、NotFound这类不同的ActionResult,得先发送请求拿到完整的HttpResponseMessage,再按状态码分支处理:
private async Task RetrieveData() { try { var response = await Client.GetAsync("api/Drivers/2"); // 处理成功响应(2xx状态码) if (response.IsSuccessStatusCode) { var dataTemp = await response.Content.ReadFromJsonAsync<Drivers>(); text = dataTemp?.name ?? "无司机名称"; } // 处理NotFound(404) else if (response.StatusCode == HttpStatusCode.NotFound) { text = "请求的司机不存在"; } // 处理其他错误状态码 else { text = $"请求失败,状态码:{(int)response.StatusCode}"; } } catch (HttpRequestException ex) { // 处理网络异常、请求超时等情况 text = $"网络请求出错:{ex.Message}"; } }
关于你的疑问解答
是否可以通过代码处理OK、NotFound这类ActionResult?
完全可以,这是前端与API交互的标准操作。这是设计初衷还是不良实践?
这绝对是RESTful API的设计初衷。HTTP状态码是语义化的通信约定:200 OK表示资源获取成功,404 NotFound表示请求的资源不存在,这些状态码就是用来让客户端区分不同请求结果,进而做出对应业务处理的,属于最佳实践。ActionResult的用途是否仅为让开发者查看状态?
当然不是。ActionResult(对应HTTP状态码)是服务端向客户端传递请求结果语义的核心方式:- 生产环境中,客户端可根据状态码自动处理逻辑(比如401跳转登录页、403提示无权限、404显示资源不存在页面);
- 开发者查看状态码只是调试阶段的用途,并非其核心价值。
内容的提问来源于stack exchange,提问作者Andi Hincu
相关产品推荐
相关产品推荐

