C# 使用单个字符串参数调用HttpPost无效

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

我有以下.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
        // 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);