【问题标题】:C# Pass Json to HTTP Post RequestC# 将 Json 传递给 HTTP Post 请求
【发布时间】:2018-05-07 23:24:43
【问题描述】:

我正在尝试将 Json 字符串作为 HttpWebRequest 的参数与 URL 一起传递。请求会很好地命中方法,但每次参数都是空的。我尝试过很多这样的例子,但没有成功:How to send json data in POST request using C#

这是将被序列化和传递的示例对象

Amount amount = new Amount
{
    currencyCode = "EUR",
    amount = 1234
}
string JsonParameters = amount.ToJson();
var result = Methods.ExecuteHttpPostRequestWithJson("http://localhost:51581/Home/Test", JsonParameters);

Json 参数正确序列化成

{"currencyCode":"EUR","amount":1234}

这是我尝试创建的方法。我尝试了多种方法,但每次都为空。

这里是要调用的方法

public static string ExecuteHttpPostRequestWithJson(string URL, string Json)
    {
        string result = "";
        var httpWebRequest = (HttpWebRequest)WebRequest.Create(URL);
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Method = "POST";
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {;
            streamWriter.Write(Json);
            streamWriter.Flush();
            streamWriter.Close();
        }

        var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
        {
            result = streamReader.ReadToEnd();
        }

        return result;
    }

这是正确命中的方法,但货币代码和金额的参数均为空。

[HttpPost]
public JsonResult Test(string currencyCode, string amount)
{
    return Json(new
    {
        Test = "It worked"
    });
}

【问题讨论】:

  • 您正在用 javascript 创建一个对象。尝试在 c# 中使用currencyCode 和amount 创建一个类,并将该类的对象用作函数中的参数
  • 我试过了,我得到 currencyCode = null 和 amount = 0

标签: c# rest


【解决方案1】:

除了Nouman Bhatti 在评论中建议的内容——定义服务中的数量类以及更新服务的 POST 方法签名以期望该对象——还使用[FromBody] 属性

new Amount
{
    currencyCode = "EUR",
    amount = 1234
}

新的 POST 方法签名

[HttpPost]
public JsonResult Test([FromBody]Amount amount)

【讨论】:

  • 这就是解决方案!我之前尝试过将其更改为 Amount,但从未尝试过 [FromBody]。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-06-16
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多