Blazor中如何使用HttpClient调用API的Sell端点?
使用HttpClient调用商品销售PUT接口
现有代码说明
服务层代码
public Sell Sell(Guid guid, double Quantity) { Sell sell = new Sell(); var result = _connectionDB.States.Find(guid); sell.Name = result.Name; sell.EAN = result.EAN; sell.Profit = result.Profit; sell.Quantity = Quantity; sell.SellePriceBrutto = result.SellePriceBrutto; sell.GTU = result.GTU; sell.dateTimeSell = DateTime.Now; sell.PurchasePriceNetto = result.PurchasePriceNetto; sell.Id = Guid.NewGuid(); _connectionDB.Sells.Add(sell); result.Quantity = result.Quantity - Quantity; _connectionDB.SaveChanges(); return sell; }
控制器代码
[HttpPut("Sell")] public IActionResult Sell(Guid guid, double Quantity) { var result = _connectionDB.States.Find(guid); if (result == null) { return Ok("No product in DB"); } if (result.Quantity < 0) { return Ok("No Quantiti product in DB"); } var sell = _userService.Sell(guid, Quantity); return Ok(sell); }
功能与请求示例
该接口根据商品ID(guid)查找库存商品,扣除指定数量(Quantity)的库存,并将本次销售记录添加到销售记录表中。接口的请求示例链接为:
https://localhost:7038/api/Warhause/Sell?guid=76f42455-0885-4edb-9d0a-0ebdd7610e4f&Quantity=1
HttpClient调用方法
完全可以用HttpClient调用这个PUT接口,以下是几种实用的实现方式:
1. 异步调用(推荐,符合.NET异步编程规范)
using System.Net.Http; using System.Net.Http.Json; using System.Threading.Tasks; public async Task<Sell> CallSellEndpointAsync(Guid productGuid, double quantity) { using var httpClient = new HttpClient(); var baseUrl = "https://localhost:7038/api/Warhause"; var requestUri = $"{baseUrl}/Sell?guid={productGuid}&Quantity={quantity}"; var response = await httpClient.PutAsync(requestUri, null); if (response.IsSuccessStatusCode) { return await response.Content.ReadFromJsonAsync<Sell>(); } else { var errorMessage = await response.Content.ReadAsStringAsync(); // 可根据业务需求抛出异常或返回默认值 throw new HttpRequestException($"调用失败: {errorMessage}"); } }
2. 基础同步调用(.NET 5+支持)
using System.Net.Http; using System.Net.Http.Json; var httpClient = new HttpClient(); var baseUrl = "https://localhost:7038/api/Warhause"; var productGuid = Guid.Parse("76f42455-0885-4edb-9d0a-0ebdd7610e4f"); var quantity = 1; var requestUri = $"{baseUrl}/Sell?guid={productGuid}&Quantity={quantity}"; var response = httpClient.PutAsync(requestUri, null).Result; if (response.IsSuccessStatusCode) { var sellResult = response.Content.ReadFromJsonAsync<Sell>().Result; // 处理返回的销售记录 } else { var errorMsg = response.Content.ReadAsStringAsync().Result; // 处理错误信息 }
3. 安全构造查询参数(避免字符串拼接问题)
using System; using System.Net.Http; using System.Net.Http.Json; var httpClient = new HttpClient(); var baseUrl = new Uri("https://localhost:7038/api/Warhause/Sell"); var uriBuilder = new UriBuilder(baseUrl); var query = System.Web.HttpUtility.ParseQueryString(uriBuilder.Query); query["guid"] = "76f42455-0885-4edb-9d0a-0ebdd7610e4f"; query["Quantity"] = "1"; uriBuilder.Query = query.ToString(); var response = await httpClient.PutAsync(uriBuilder.Uri, null); // 后续响应处理逻辑同上
注意事项
- 调用端需要定义与接口返回结构一致的
Sell类,属性名称和类型必须匹配。 - 实际项目中建议复用HttpClient实例(可通过依赖注入注入),避免频繁创建实例导致的资源浪费。
- 需做好异常处理,覆盖网络错误、接口返回非成功状态码等场景。
内容的提问来源于stack exchange,提问作者xoreee
相关产品推荐
相关产品推荐

