使用单个字符串参数调用 HttpPost 不起作用

Calling HttpPost with a single string parameter not working

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

调用代码如下:

string newValue = Guid.NewGuid();
//var stringContent = new StringContent(newValue);
var result = await httpClient.PostAsync(uri + newValue, null);
if (!result.IsSuccessStatusCode)

控制器方法已成功调用,但无论我尝试将值作为 HttpContent 还是作为查询参数(例如 myuri/AddValue/123)传递,它仍然以 null 传递。我在这里做错了什么?

首先,这不是查询参数;那是一个路线段。如果你想以这种方式接收它,你需要指定一个路由参数:

[HttpPost("AddValue/{value}")]

否则,您需要将其作为实际查询参数发送,即 myuri/AddValue?value=123

至于 post,默认绑定是 FromForm,它需要一个 x-www-form-urlencodedmultipart/form-data 编码的正文,这不是您要发送的内容.你需要做:

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);