我有一个简单的web api但是当我用Postman测试它时,方法参数为null。我已经查看了其他类似标题的问题,但我还没找到答案。
这是我的控制器动作:
[HttpPost]
public Member Create([FromBody] string payload)
{
var s = Request.Content.ReadAsStringAsync();
if (payload == null)
{
throw new ArgumentNullException(nameof(payload));
}
Console.WriteLine(payload);
Console.WriteLine(s);
return null;
}
在标题标签中,我已将content-type
添加为application/json
。
当我调试此内容时,payload
变量全部为null
,字符串s
包含类似
Id = 98, Status = RanToCompletion, Method = "{null}", Result = ""
那么我做错了什么?
答案 0 :(得分:1)
布达,
HttpContent.ReadAsStringAsync
返回Task<string>
,因此返回s
字符串的值。
您必须更新操作才能使其异步:
[HttpPost]
public async Task<Member> Create([FromBody] string payload)
{
var s = await Request.Content.ReadAsStringAsync();
if (payload == null)
{
throw new ArgumentNullException(nameof(payload));
}
Console.WriteLine(payload);
Console.WriteLine(s);
return null;
}
答案 1 :(得分:0)
你应该将你的字符串包装在model(object)中:
class Model
{
public string payload {get;set;}
}
[HttpPost]
public async Task<Member> Create([FromBody] Model model) // wrap Member in Task and add async keyword
{
var s = await Request.Content.ReadAsStringAsync(); // add await here
if (model.payload == null)
{
throw new ArgumentNullException(nameof(model.payload));
}
Console.WriteLine(model.payload);
Console.WriteLine(s);
return null;
}
如果您不想使用模型,请尝试仅发送纯字符串,例如"some payload"
,不要将其包装在json
中。