我正在致力于将 wcf 应用程序从 net 4.8 迁移到 6。 基本要求是所有客户必须继续工作而不做任何改变。但对于某些方法,行为是不同的。
例如在 net 4.8 中我们有这个 web 方法:
public ContractResult GetContract(int idContract)
{
return a contract
}
客户端调用post中的方法:
http://mywebserver/api/my.svc/GetContract
传入体内:
{"idContract":"245"}
这是net 6版本:
[HttpPost]
[Route("GetContract")]
public ContractResult GetContract(int idContract)
{
return a contract
}
上面的相同调用返回 statuscode 200 但参数contractId始终为0,使其工作的唯一方法就是以这种方式调用:
http://mywebserver/api/my.svc/GetContract?idContract=245
我尝试添加属性: [WebInvoke(BodyStyle = WebMessageBodyStyle.WrappedRequest)]
但它似乎不存在于net 6中。
如何对 Net 6 框架说我希望在正文请求中将参数序列化为 json?
您可以将代码修改为如下所示:
public class contractId
{
public int idContract { get; set; }
}
[HttpPost]
[Route("GetContract")]
public ContractResult GetContract([FromBody]contractId idContract)
{
if(idContract.idContract==245)
return a contract
}
然后发送json
{"idContract":245}