【问题标题】:HttpResponseMessage.Content is nullHttpResponseMessage.Content 为空
【发布时间】:2018-07-31 03:22:45
【问题描述】:

我一直在开发移动应用程序的后端和前端,但无法让我的发布请求正常工作。我一直将 Xamarin.Forms 用于前端,将 .Net 用于后端。

客户端的代码:

var res = await App.Client.PostAsync("url", args);
var s =await res.Content.ReadAsStringAsync();
await DisplayAlert("Content", s, "OK");

我已检查并收到HttpResponseMessage,但当我尝试阅读它时,内容流始终为null。我怀疑这是我在服务器端做错的事情。 服务器端代码:

[MobileAppController,Authorize,RoutePrefix("api/SomeController")]
public class someController : ApController{

    [HttpPost,Route("theRoute/{id}"),AllowAnonymous]
    public HttpResponseMessage someFunction(args)
    {
        return new HttpResponseMessage(System.Net.HttpStatusCode.OK)
        {
            Content = new StringContent("Hello");
        }
    }
}

如果我改为使用res.ToString() 显示响应,我会收到一条响应消息

StatusCode:200
ReasonPhrase:'OK'
Version:1.1
Content: System.Net.HttpStreamContent
Headers:{
    Server: Microsoft-IIS/10.0
    X-Powered-By:ASP.NET,
    Date: Tue,20,Feb 2018 17:08:42 GMT,
    Content-Length:4
    Content-Type: application/json; charset=utf-8
}

我一直试图弄清楚为什么Contentnull,但我不知道为什么。

编辑 1:App.Client 是整个移动应用程序使用的HttpClient

在我的app.xaml.cs 文件中:

static HttpClient client;

public static HttpClient Client
{
    get
    { 
        if (client == null)
        {
            client = new HttpClient();
        }
        return client;
    }
}

【问题讨论】:

  • App.Client.PostAsync 是您创建的方法吗?如果是,您可能会在有机会读取流之前处理掉客户端。#
  • 您是否尝试过简单地从控制器返回字符串或对象?
  • 实际上哪个为空? res.Content?您是否检查了 url 是否正确,并尝试通过邮递员(chrome 扩展)对其进行测试,以发现您的后端工作正常。如果它正在工作,那么只需调试并检查 res 有什么。如果 res.Content 存在并且 s 具有值,那么我猜您在显示警报消息时缺少 s.Result 以获取其结果。只需检查此链接stackoverflow.com/questions/12413287/…
  • 返回字符串或对象适用于 GET 请求,但我似乎无法让 POST 请求正常工作。
  • 尝试明确设置内容类型,例如 Content = new StringContent("Hello", Encoding.UTF8, "text/plain");

标签: c# .net xamarin.forms httpresponsemessage


【解决方案1】:

尝试在应用程序响应类型上设置客户端 DefaultRequestHeaders。例如:

    client.DefaultRequestHeaders.Add("Accept", "application/json");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多