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

C# Web API项目ImportInventory方法未执行问题求助

问题根因

你的ImportInventory方法从未被主动调用,所以断点不会命中、内部逻辑完全不会执行。
从你贴的代码看,POST接口的Action逻辑仅完成了POSTInventory类的实例化和两个属性赋值,没有触发该实例下的ImportInventory方法,自然不会执行COM相关的库存导入逻辑。

现存其他代码问题
  • 路由特性误用:[HttpPost(Name = "POSTInventory")]里的Name参数是路由名称标识,不是接口访问路径,当前接口实际匹配POST方式访问/Inventory的请求。
  • Action命名不规范:POST请求对应的方法命名为Get,容易和GET接口混淆,不符合Web API常规命名约定。
  • 潜在空引用异常:业务类中直接判断StrReturn.Length,如果SDK返回null会直接抛出空引用错误。
  • COM组件平台匹配风险:你引用的Pastel SDK是COM组件,项目默认Any CPU配置可能和COM组件的编译架构不匹配,调用时会抛出COM类注册失败的错误。
修正代码

控制器代码修正

using MDRDS_PastelIntegrator.Models;
using Microsoft.AspNetCore.Mvc;

namespace MDRDS_PastelIntegrator.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class InventoryController : ControllerBase
    {
        private readonly ILogger<InventoryController> _logger;

        public InventoryController(ILogger<InventoryController> logger)
        {
            _logger = logger;
        }

        [HttpPost]
        public IActionResult ImportInventory(string pParameter, string pPath)
        {
            var bizInstance = new POSTInventory();
            // 显式调用业务方法,触发内部逻辑
            string execResult = bizInstance.ImportInventory(pParameter, pPath);
            return Ok(new
            {
                Parameter = pParameter,
                Path = pPath,
                ImportResult = execResult
            });
        }
    }
}

业务类代码修正

namespace MDRDS_PastelIntegrator.Models
{
    public class POSTInventory
    {
        public string? Parameter { get; set; }
        public string? Path { get; set; }

        public string ImportInventory(string Parameter, string Path)
        {
            var SDK = new PasSDK.PastelPartnerSDK();

            // 设置授权
            var licenseSetter = new SetLicense();
            licenseSetter.MethodSetLicense();

            // 设置数据路径
            var strReturn = SDK.SetDataPath(Path);

            if (strReturn == "0")
            {
                var strIn = Parameter;
                // 执行库存导入
                strReturn = SDK.ImportInventory(strIn);
            }

            // 返回值为空时提示未指定序列号
            if (string.IsNullOrEmpty(strReturn))
            {
                strReturn = "Serial Number Not Specified.";
            }

            // 组装返回结果
            strReturn = strReturn == "0" ? "0 = Success" : "1 = Unsuccessfull";

            return strReturn;
        }
    }
}
验证步骤
  1. 替换上述代码后重新编译项目,在ImportInventory方法第一行打调试断点
  2. 通过Swagger或接口测试工具发送POST请求到对应接口,携带pParameter和pPath两个参数
  3. 如果调用时提示"检索COM类工厂失败,错误码80040154",右键项目→属性→生成,将目标平台改为和你安装的Pastel SDK一致的架构(32位SDK选x86,64位选x64),取消使用Any CPU配置后重新编译即可。

内容的提问来源于stack exchange,提问作者Renier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 12:01:04