C# 使用单个字符串参数调用HttpPost无效
我有以下.Net Core 2.2控制器方法,该方法始终接收空值:C# 使用单个字符串参数调用HttpPost无效,c#,asp.net-core,httpclient,C#,Asp.net Core,Httpclient,我有以下.Net Core 2.2控制器方法,该方法始终接收空值: public class ValuesController : Controller { [HttpPost] public async Task<IActionResult> AddValue(string value) { var newValue = await DoSomethingWithValue(value); // value is null here
public class ValuesController : Controller
{
[HttpPost]
public async Task<IActionResult> AddValue(string value)
{
var newValue = await DoSomethingWithValue(value); // value is null here
// Other code
return Ok();
}
}
控制器方法调用成功,但无论我尝试将值作为HttpContent传递,还是作为查询参数(例如myuri/AddValue/123)传递,它都会以null的形式传递。我在这里做错了什么?首先,这不是一个查询参数;那是一段线路。如果希望以这种方式接收,则需要指定路由参数:
[HttpPost("AddValue/{value}")]
否则,您需要将其作为实际的查询参数发送,即myuri/AddValue?value=123
至于post,默认绑定是FromForm
,它需要一个x-www-form-urlencoded
或多部分/表单数据
编码体,这不是您要发送的。您需要执行以下操作:
var stringContent = new StringContent($"value={newValue}", Encoding.UTF8, "application/x-www-form-urlencoded");
或者您可以实际使用FormUrlEncodedContent
:
var values = new Dictionary<string, string>
{
["value"] = Guid.NewGuid().ToString()
};
var formUrlEncodedContent = new FormUrlEncodedContent(values);
var值=新字典
{
[“值”]=Guid.NewGuid().ToString()
};
var formUrlEncodedContent=新的formUrlEncodedContent(值);
尝试显式设置来自正文:AddValue([FromBody]字符串值)
var values = new Dictionary<string, string>
{
["value"] = Guid.NewGuid().ToString()
};
var formUrlEncodedContent = new FormUrlEncodedContent(values);