无法使用Postasync将表单数据发送到Web API

时间:2019-01-22 11:40:44

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

我正在尝试将sourceFile值发送到Web api。但是在API中,我收到的是null

var formVars = new Dictionary<string, string>();
formVars.Add("sourceFile", "Helloo");

HttpContent content = new FormUrlEncodedContent(formVars);                   

var result = client.PostAsync("ImageApi/Compare", content).Result;
string resultContent = result.Content.ReadAsStringAsync().Result;
return Content(resultContent);

API代码

[HttpPost()]
public ActionResult Compare(string sourceFile)
{
   return Ok(sourceFile);
}

我正在使用DotNet core 2.0

1 个答案:

答案 0 :(得分:0)

您需要等待结果,请勿尝试自行访问.Result。到那时电话还没有结束。

您需要使用以下内容:

HttpContent content = new FormUrlEncodedContent(formVars);                   

var result = await client.PostAsync("ImageApi/Compare", content);
result .EnsureSuccessStatusCode();
string responseBody = await result.Content.ReadAsStringAsync();

这是基于您的代码的,尚未经过测试,但应该为您设置正确的路径以使其正常工作。永远不要尝试通过访问.Result做异步操作。

还有一件事,您还需要使用模型。

创建一个模型类,其中包含您在字典中添加的所有属性。

在您的情况下,它将类似于:

public class MyModel{
     public string sourceFile { get ;set; }
}

您的控制器将变为:

[HttpPost()]
public ActionResult Compare([FromBody]MyModel model)
{
   return Ok(model.sourceFile);
}