【问题标题】:Calling a http post in an MVC action method?在 MVC 操作方法中调用 http 帖子?
【发布时间】:2015-09-30 19:51:07
【问题描述】:

我正在使用 HttpClient 的操作方法中调用 POST,但我不确定它是否正确完成。我不需要它是异步的。基本上,如果在我的系统上成功创建用户,我会在另一个系统中创建他们。这是我正在调用的代码:

 using (var client = new HttpClient())
        {
            var postData = new FormCollection();
            postData["api_token"] = ConfigurationManager.AppSettings["ApiToken"];
            postData["api_action"] = "Save";
            postData["customer_email"] = userName;
            postData["customer_password"] = password;
            var result = client.PostAsync(string.Format("{0}/api", ConfigurationManager.AppSettings["Url"]), content).Result;

            var xmlResponse = result.Content.ReadAsStringAsync().Result;

}

【问题讨论】:

  • 你的问题到底是什么?
  • @ToddMenier - 我说的对吗?

标签: c# asp.net-mvc-4 dotnet-httpclient


【解决方案1】:

以下两行:

var result = client.PostAsync(string.Format("{0}/api", ConfigurationManager.AppSettings["Url"]), content).Result;

var xmlResponse = result.Content.ReadAsStringAsync().Result;

应该重构如下:

var result = await client.PostAsync(string.Format("{0}/api", ConfigurationManager.AppSettings["Url"]), content);

var xmlResponse = await result.Content.ReadAsStringAsync();

您必须使用await,否则您会阻塞在异步方法结束时调用Result 的线程。此外,您不应忘记相应的操作应返回 Task<ActionResult>

public async Task<ActionResult> ActionName()

【讨论】:

  • 嗨,当我这样做时,我没有在 xmlResponse 中返回 xml 字符串,它返回一个 HttpResponseMessage 这是我不想要的,我想要 xml,所以我可以开始解析它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-25
  • 1970-01-01
  • 2016-02-25
  • 2020-01-10
  • 1970-01-01
相关资源
最近更新 更多