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了,没请求到接口,要不控制台应该会报错。
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请求?装个抓包软件,看一下自己的请求