我无法让Azure函数接受来自Android设备的Json对象。我相信它必须格式错误,因为它接受c#(NewtonSoft)的Json。我正在接收
Http status code 400.
天蓝色函数
[FunctionName("TestFunc")]
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
引起问题的代码
commsMsg = await req.Content.ReadAsAsync<CommsMsg>();
从Android客户端接收commsMsg为null。这是CommsMsg:
public class CommsMsg:ICommsMsg
{
public int commandCode { get; set; }
public List<Extra> extras { get; set; }
}
还有其他内容:
public class Extra
{
public string name { get; set; }
public string value { get; set; }
public Extra() { }
public Extra(String name, string value)
{
this.name = name;
this.value = value;
}
}
额外只是名称值字符串。我认为其他原因导致了这个问题。 我无法在本地调试,就像我在Visual Studio 2017中的localhost上运行该函数一样,Android仿真器将无法连接到
上的localhost"http://10.0.2.2:7071/api/TestFunc
或
http://102.168.1.10:7071/api/TestFunc
所以我无法检查模拟器正在发送什么。在Android Studio中,我有:
JSONObject obj = new JSONObject();
obj.put("commandCode",100);
JSONObject extras = new JSONObject();
extras.put("val1",101);
extras.put("val2",102);
obj.put("Extras",extras);
JsonObjectRequest req = new JsonObjectRequest
(Request.Method.GET, url,obj, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
//not getting here
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//bad request 400 here
}
});
errorListener表示Http状态代码为400。如果可以在本地调试,则更容易解决,但无法使用。我格式化Json的格式有误吗?
答案 0 :(得分:0)
我无法使JSON对象正常工作,所以最终我使用了GSON例如:
String json = gson.toJson(commsMsg);
JSONObject obj = new JSONObject(json);
我使用了非常有用的GNROK连接到运行良好的localhost。我遵循了这个教学方法,效果很好。
https://hackernoon.com/using-ngrok-with-azure-functions-7e209e96538c