asp.net 特定格式的Rest API参数

eagi6jfj  于 2023-05-19  发布在  .NET
关注(0)|答案(1)|浏览(97)

我必须在asp.net webforms(c#)https://connect.mycomp.in/ConnectTP/PlaceOrder中调用一个rest API

Below is the curl example
curl \
-X POST https://BaseURL/PlaceOrder \
-d "jData={\"uid\":\"Test\", \"actid\":\"Test\", 
\"qty\":\"50\", \"price\":\"1400\", \"ret\":\"DAY\"}“ \
-d “jKey=TRELIU34533456SSUDFGU234”

我正在尝试使用JavaScriptSerializer,但它不能按预期工作,任何帮助都非常感谢。先谢谢你了

object input = new jData
                {
                    uid = "xxxxxxx",
                    actid = "xxxxxxx",
                    ..........,
                    ..........,
                 },jKey = "KEYHERe";
  string inputJson = (new JavaScriptSerializer()).Serialize(input);

--更新-
服务器返回了错误的请求,有人可以引导吗

var jd1 = new jData
        {
            uid = "xxxxxxx",
            actid = "xxxxxxx",
            ................,
            ..........,

        };

        object input = new PlaceOrderParam
        {
            jData = jd1,
            jKey = Session["tk"].ToString()
        };

        string inputJson = (new JavaScriptSerializer()).Serialize(input);
        WebClient client = new WebClient();
        client.Headers["Content-type"] = "application/json";
        client.Encoding = Encoding.Default;
        string json = client.UploadString(apiUrl, inputJson);

更新2----------------------------------------------------

using (var httpClient = new HttpClient())
            {
                using (var request = new HttpRequestMessage(new HttpMethod("POST"), apiUrl))
                {
                    request.Content = new StringContent("jData={\"uid\":\"xxxxxxx\",\"actid\":\"xxxxxxx\",\"ret\":\"DAY\"}\" , \"jKey=" + Session["tk"].ToString() + "");
                    request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");

                    var response =  await httpClient.SendAsync(request);
                }
            }

尝试将curl转换为HttpClient,但仍然是错误的请求
更新3--------------------

QUERY PARAMETERS
Parameter
Name    Possible value  Description
jData*      Should send json object with fields in below list
jKey*       Key Obtained on login success.
cyvaqqii

cyvaqqii1#

不能对curl使用两个-d参数。如果你这样做,只有最后一个会被传递,这意味着你的有效负载是jKey=TRELIU34533456SSUDFGU234,这可能不是你想要的。此外,这甚至不是有效的JSON,这是JavaScriptSerializer.serialize()输出的。
我认为curl命令应该如下所示

curl \
-X POST https://BaseURL/PlaceOrder \
-H "application/json" \
-d "{\"jData\":{\"uid\":\"Test\", \"actid\":\"Test\", \"qty\":\"50\", \"price\":\"1400\",\"ret\":\"DAY\"}, \"jKey\":\"TRELIU34533456SSUDFGU234\"}"

你的JavaScript看起来是正确的,所以不知道为什么不工作。
如果不知道API所期望的是什么,就很难说curl调用或JavaScript。
看起来行延续(\)和奇数引号()与(")也可能会让你绊倒。(我可能是错的--可能是复制/粘贴到你的问题中)。我编辑了这个命令,删除了可能会混淆JSON字符串的行继续符,以转义引号。

相关问题