You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 09:07:36