如何写java调用C#写的webapi

问题遇到的现象和发生背景

c#写的webapi无法读取JAVA传过来的参数,无法确定是调用者的问题,还是webapi的问题

需要请教的是是C#的WEBAPI写的有问题,还是java的调用程序写法有误?

问题相关代码,请勿粘贴截图

webapi程序

  [HttpPost("PostTest")]
        public IActionResult PostProcess([FromForm] dynamic obj)
        {
           //obj有code和code2两个参数
            Console.Write("123");
            Console.Write(obj.code2);
            Console.Write("~~~456");
            return Ok("irerjeokjtpeat2121");
}

客户端的JAVA程序


        JSONObject jsonObject = new JSONObject();
        jsonObject.put("code", "123");
        jsonObject.put("code2", "1232");
        System.out.println(jsonObject.toString());
        String result2 = sendPost(urlString2, jsonObject.toString(), false);
        logger.debug("返回信息22:" + result2);


            conn.setRequestProperty("Content-type", "application/json;charset=UTF-8");

            conn.connect();

            // 获取URLConnection对象对应的输出流
            out = new DataOutputStream(conn.getOutputStream());

            out.write(param.getBytes("utf-8"));
            // flush输出流的缓冲
            out.flush();
            System.out.println("getResponseCode:" + conn.getResponseCode());
            if (conn.getResponseCode() == 200) {
                // 定义BufferedReader输入流来读取URL的响应
                in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
            }




运行结果及报错内容

日志文件中什么也没有。本来应该将code2的内容打印出来的。

我的解答思路和尝试过的方法
我想要达到的结果

看java代码请求头是application/json,那么webapi应该是用FromBody,而不是FromForm,FromForm是获取键值对数据用的,而且obj会是string类型的数据。

FromBody是接受发送的json字符串用的,最好需要申明变量类型为一个类,对应发送的数据结构。大概下面的示例。变量申明为dynamic 在core3下会变为KindValue,需要Conver.ToString转为对应的json字符后再反序列化为类实例。具体参考这篇文章,dynamic为数据需要用到NewtonsoftJson包。

题主不是用Swagger UI配置过webapi的接口调用,会有接口说明的,而且题主指定过方法名称,路径为 http://域名/路由名称/PostTest 。如果控制台未打印出内容,那么应该是请求的url有问题,404了,没请求到接口,要不控制台应该会报错。

img


        public class DataItem
        {
            public string code { get; set; }
            public string code2 { get; set; }
        }
  [HttpPost("PostTest")]
        public IActionResult PostProcess([FromBody] DataItem obj)
        {
           //obj有code和code2两个参数
            Console.Write("123");
            Console.Write(obj.code2);
            Console.Write("~~~456");
            return Ok("irerjeokjtpeat2121");
}

你封装POST 或者 GET 请求啊。
根据协议中的参数配啊。
没配参数当然拿不到值。
还有浏览器请求有跨域问题。

你确定你java client发的是json请求?装个抓包软件,看一下自己的请求