【问题标题】:C# Read http post resultC#读取http post结果
【发布时间】:2015-10-19 19:58:07
【问题描述】:

我在将示例 guid 字符串放入 HttpResponseMessage 的 MVC 控制器中有以下代码:

public class CertifyController : Controller
{
    [HttpPost]
    public async Task<HttpResponseMessage> NewCertifyOfferRequestAsync(string requestString)
    {
        string activityId = "30dd879c-ee2f-11db-8314-0800200c9a66";

        HttpResponseMessage httpResponseMessage = new HttpResponseMessage();
        httpResponseMessage.Content = new StringContent(activityId);
        return httpResponseMessage;
    }

}

我正在使用以下代码通过控制台应用程序调用此控制器:

using (HttpClient client = new HttpClient())
{
    client.BaseAddress = new Uri("http://localhost:84928/");

    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    string requestString = "df5f5587-f1ef-449a-9d20-7f386ea638a8";

    HttpResponseMessage response = await client.PostAsJsonAsync("Certify/NewCertifyOfferRequestAsync", requestString);
    if (response.IsSuccessStatusCode)
    {
        string activityId = await response.Content.ReadAsStringAsync();
        Console.WriteLine("Received activity id: " + activityId);
    }
}

我希望在响应中收到 activityId "30dd879c-ee2f-11db-8314-0800200c9a66"。但是 activityId 正在获取“StatusCode:200,ReasonPhrase:'OK',版本:1.1,内容:System.Net.Http.StringContent,标题:\r\n{\r\n Content-Type: text/plain; charset =utf-8\r\n}" 来自 ReadAsStringAsync 调用。

我应该如何更改activityId的分配,以便它获得在Controller中生成的activityId?

【问题讨论】:

  • 你确定 activityId 没有得到你的结果吗?在此处发布整个结果。
  • 这是您的实际 WebAPI 代码吗?看起来您正在返回一个HttpResponseMessge,它被完整地序列化为字符串。
  • @gustavodidomenico 我发布了整个activityId response.Content.ReadAsStringAsync() 正在返回。
  • @CodeCaster 我发布了我的整个控制器代码。
  • 除非您使用的是 MVC 6,否则这就是 MVC 控制器。 WebAPI 控制器继承自 ApiController。

标签: c# httpclient httpresponse asp.net-mvc-controller


【解决方案1】:

如果是 webapi,您应该能够更改您的方法签名以返回“字符串”而不是 HttpResponseMessage。

例如

public string Get(int id)
{
    return "value";
}

对于详细示例,您可以使用 Visual Studio 创建 WebApi Web 应用,并查看“ValuesController.cs”

【讨论】:

  • 我没有创建 HttpResponseMessage,而是将 post 函数的返回类型更改为 Task 并直接返回 guid(返回 actvityId)。我可以在调用控制台应用程序中获取 activityId。如果我保持 HttpResponseMessage 的创建原样,您能否告诉我应该如何更改接收代码以获取 activityId?
  • 我没试过,但我想如果你强烈键入它并返回内容类型设置为“application/json”。然后在您的客户端,将内容反序列化为一个对象。你应该得到你想要的。
猜你喜欢
  • 2010-10-20
  • 2018-08-29
  • 2011-12-10
  • 1970-01-01
  • 2012-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多