【发布时间】: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
}
我一直试图弄清楚为什么Content 是null,但我不知道为什么。
编辑 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