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; } } }
验证步骤
- 替换上述代码后重新编译项目,在
ImportInventory方法第一行打调试断点 - 通过Swagger或接口测试工具发送POST请求到对应接口,携带
pParameter和pPath两个参数 - 如果调用时提示"检索COM类工厂失败,错误码80040154",右键项目→属性→生成,将目标平台改为和你安装的Pastel SDK一致的架构(32位SDK选x86,64位选x64),取消使用Any CPU配置后重新编译即可。
内容的提问来源于stack exchange,提问作者Renier
相关产品推荐
相关产品推荐

