C# Xamarin Android客户端将JSON发布到节点JS web服务
我在使用Xamarin Android(C# Xamarin Android客户端将JSON发布到节点JS web服务,c#,android,node.js,xamarin,mvvmcross,C#,Android,Node.js,Xamarin,Mvvmcross,我在使用Xamarin Android(MvvmCross)从我的Android应用程序发送JSON数据时遇到问题 Android应用程序中的功能可以正常运行;但是,我的web服务(使用Express在Node JS中编写)似乎没有在其端点上检测到post请求。请注意,使用get(将数据从web服务发送到Android应用程序)的其他端点工作正常 下面是我将数据发布到web服务的功能 public async Task<int> insertSales(IEnumerable<
MvvmCross
)从我的Android应用程序发送JSON
数据时遇到问题
Android应用程序中的功能可以正常运行;但是,我的web服务(使用Express
在Node JS
中编写)似乎没有在其端点上检测到post请求。请注意,使用get
(将数据从web服务发送到Android应用程序)的其他端点工作正常
下面是我将数据发布到web服务的功能
public async Task<int> insertSales(IEnumerable<Models.SalesTable> newsales)
{
/*ServerDatabaseApi.insertSalesEndpoint = "http://" + ipAddress + ":" + port +
"/insertsales";*/
WebRequest request = WebRequest.CreateHttp(ServerDatabaseApi.insertSalesEndpoint);
request.Method = "POST";
request.ContentType = "application/json";
try
{
using (var streamwriter = new StreamWriter(await request.GetRequestStreamAsync()))
{
string json = JsonConvert.SerializeObject(newsales, Formatting.Indented);
streamwriter.Write(json);
streamwriter.Flush();
}
return 1;
}
catch (WebException we)
{
return 0;
}
}
我尝试使用console.log
跟踪它是否到达端点。然而,它从不执行
你能帮我找出哪里出错了吗?提前感谢。您的.NET代码中没有实际发送
WebRequest的内容。您创建请求,向其流中写入一些JSON,然后刷新它。以下是进行网络呼叫的简单方法(未经测试):
public异步任务InsertSales(IEnumerable newSales)
{
var ipAddress=“;//此处是您的IP地址
var port=”“;//此处是您的端口
var endpoint=$“http://{ipAddress}:{port}/insertsalesline”;
var requestString=JsonConvert.SerializeObject(newSales);
var content=newstringcontent(requestString,Encoding.UTF8,“application/json”);
使用(var client=new HttpClient())
{
var reponse=wait client.PostAsync(端点、内容);
if(响应.发布成功状态代码)
返回1;
其他的
返回0;
}
}
你好,卢克,谢谢你的帮助和解释!根据答案,起初我以为.Flush
已经在发送WebRequest
。
/*endpoint for inserting a new sales to sales table*/
app.post('/insertsales', function(appReq, appRes){
console.log("Insert sales; count : "+ appReq.body.length);
sql.connect(conn).then(function(){
console.log("Insert sales; count : "+ appReq.body.length);
for (var i = 0 ; i < appReq.body.length ; i++) {
new sql.Request()
.query("insert into SalesTable " +
"values ('"+appReq.body[i].DocumentNo+"','"+appReq.body[i].DateCreated+"','"+appReq.body[i].Location+"',"+
appReq.body[i].TotalDiscountAmount+","+appReq.body[i].Total+",'"+appReq.body[i].SalesmanId+"','"+
appReq.body[i].CustomerId+"',"+appReq.body[i].Latitude+","+appReq.body[i].Longitude+")")
.catch(function(err){
console.log(err);
});
}
}).catch(function(err){
console.log(err);
});
});
public async Task<int> InsertSales(IEnumerable<Models.SalesTable> newSales)
{
var ipAddress = "";// your IP address here
var port = ""; // your port here
var endpoint = $"http://{ipAddress}:{port}/insertsalesline";
var requestString = JsonConvert.SerializeObject(newSales);
var content = new StringContent(requestString, Encoding.UTF8, "application/json");
using (var client = new HttpClient())
{
var reponse = await client.PostAsync(endpoint, content);
if (reponse.IsSuccessStatusCode)
return 1;
else
return 0;
}
}