传递的变量为空

本文关键字:变量 | 更新日期: 2023-09-27 18:30:38

我正在构建一个用于同步数据和下拉对象的小型 Web API 效果很好,但无论我尝试什么,将我的对象向上推都不起作用。

经过编辑以反映一些更改:

这是我的控制器:

[System.Web.Mvc.HttpPost]
    public void UpdateTasks([FromBody] string s)
    {
        Console.WriteLine(s);
    }

这是我的客户端代码:

HttpContent c = new StringContent("1234");
        HttpClient client = new HttpClient();
        c.Headers.ContentType = new MediaTypeHeaderValue("application/json");
        client.BaseAddress = new Uri("http://localhost/QAQC_SyncWebService/Tasks/UpdateTasks/");
        var resp = client.PostAsync(client.BaseAddress, c).Result;

如果我把它放在 URI 中,我可以得到一个值,但单独的字符串内容似乎不起作用。

传递的变量为空

尝试

[HttpPut]
public void UpdateTasks([FromBody]string s)
{
    Console.WriteLine(s);
}

另请注意:

  1. [FromBody] 参数必须编码为 =value剩下的最后一个障碍是 Web API 要求您以特定格式传递 [FromBody] 参数。这就是为什么我们的值参数在前面的示例中为 null 的原因,即使在我们使用 [FromBody ] 修饰方法的参数之后也是如此。与大多数客户端和服务器端框架期望的相当标准的键=值编码不同,Web API 的模型绑定器希望在 POST 正文中查找 [FromBody] 值,而无需键名。换句话说,它不是键=值,而是寻找=值。到目前为止,这部分是将基元类型发送到 Web API POST 方法中最令人困惑的部分。一旦你理解了它,还不错,但非常不直观,无法发现。

从 http://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/

正在初始化客户端的行。基址看起来有点不对劲。

HttpContent c = new StringContent("1234");
HttpClient client = new HttpClient();
c.Headers.ContentType = new MediaTypeHeaderValue("application/json");
client.BaseAddress = new Uri("http://localhost/QAQC_SyncWebService/Tasks/UpdateTasks");
var resp = client.PutAsync(client.BaseAddress, c).Result;

PutAsync 方法需要完整的 URI,而不仅仅是一个方法。在这里阅读更多: https://msdn.microsoft.com/en-us/library/hh138168(v=vs.118).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1