传递变量Null

时间:2016-01-15 21:18:35

标签: c# asp.net-web-api dotnet-httpclient

我正在构建一个用于同步数据和下拉对象的小型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中,我可以获得一个值,但单独的字符串内容似乎不起作用。

2 个答案:

答案 0 :(得分:2)

尝试

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

请注意:

  1. [FromBody]参数必须编码为= value 剩下的最后一个障碍是Web API要求您以特定格式传递[FromBody]参数。即使我们使用[FromBody]修饰方法的参数之后,这就是我们的值参数在前一个示例中为null的原因。 Web API的模型绑定器不需要大多数客户端和服务器端框架所期望的相当标准的key = value编码,而是希望在POST主体中找到[FromBody]值而根本没有关键名称。换句话说,它代替key = value,它正在寻找= value。 到目前为止,这部分是将原始类型发送到Web API POST方法中最令人困惑的部分。一旦你了解它就不会太糟糕,但非常不直观且不可发现。
  2. 来自http://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/

答案 1 :(得分:1)

您正在初始化client.BaseAddress的行看起来有点偏。

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