JSONObject Azure函数

时间:2019-03-04 08:35:23

标签: android json azure-functions

我无法让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的格式有误吗?

1 个答案:

答案 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