问题描述
做一个登录模块,提供api给前端调用,发现死活拿不到入参。最开始的写法如下:
public string Login([FromBody] string InData)
{
//读取登录json
Log.AddTrack("LoginController.Login", "Begin");
Log.AddTrack("LoginController.Login", "收到入参:" + InData);
return InData;
}
postman调用如下:
查看本地日志:
居然为空!
解决思路
- 百度,发现此类问题不多,所以记录一下。
- 查到一种方法,说需要新建一个模型类,用于接收结果,才能显示。于是尝试:
public class DataModel
{
public string InParam
{
get;
set;
}
}
public string Login([FromBody] DataModel InData)
{
//读取登录json
Log.AddTrack("LoginController.Login", "Begin");
Log.AddTrack("LoginController.Login", "收到入参:" + InData.InParam);
return InData.InParam;
}
结果同上,没有效果,于是猜测可能接收到的不是一个string,所以都赋值不过去。
- 再查,发现postman的content-type →application/json,于是想用一个json类来接收,于是改造代码如下:
public string Login([FromBody] JObject InData)
{
//读取登录json
Log.AddTrack("LoginController.Login", "Begin");
Log.AddTrack("LoginController.Login", "收到入参:" + InData.ToString());
return InData.ToString();
}
嘿,还真可以!
不知道这种接收方式是谁想出来的。
问题解决!
拓展
再拓展一下:
- FormBody跟FromUrl
- 使用url的post方式:
[Route("test")]
[HttpPost]
public string TestReturn(string a,string b)
{
//读取登录json
Log.AddTrack("LoginController.TestReturn(", "Begin");
return a + b;
}
postman调用方式:
参考链接:
https://blog.csdn.net/PLA12147111/article/details/89666797
https://www.cnblogs.com/rohelm/p/3207430.html