c#在写api接口的时候如果定义一个含有out入参的接口探究

在阅读老项目的时候,发现有人在webservice上用了out类型的入参

[WebMethod(Description = "数据交互统一接口")]
public string Request(string MethodName, string inParaXml, out string outParaXml)
{
     string ret = string.Empty;
     string outPara = string.Empty;
     BsRequest bsReq = new BsRequest();
     ret = bsReq.Request(MethodName, inParaXml, ref outPara);
     outParaXml = outPara;
     return ret;
 }

在这里插入图片描述

于是当我用postman正常方法调用的时候始终不行,按照项目原来对接方式是通过soap的方式调用的。
于是在在postman中用soap的方式:content-type = text/xml。调用是可以成功返回值的,此时outParaXml自动匹配到了如图所示位置

在这里插入图片描述

注意soap入参中没有包含outParaXml。

既然soap方式可以调用,我在想新版本的controller中如果加入一个out入参会发生什么。
首先是.net6中

[HttpPost("/helloworld")]
public string helloworld(out string b)
{
    b = "momomo";
    return "helloworld";
}

我们随意返回一个momomo,发现最后postman没有任何返回,代码中打了断点也没有进入该方法。
查阅资料https://github.com/dotnet/aspnetcore/issues/43256
中有回答
在这里插入图片描述

改成.net 7 测试

在这里插入图片描述

会报错提示不能包含ref类型
官方改进文章https://github.com/dotnet/aspnetcore/pull/43842
当具有非常模糊消息的类型时,检测 Try/Parse 方法的机制将失败

似乎还是没解决这个问题,不知道大伙有啥看法。
总之我们尽量不要用out,ref这种类型的入参!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值