【问题标题】:Syntax to pass Json to rest api将 Json 传递给 rest api 的语法
【发布时间】:2019-09-09 09:54:02
【问题描述】:

在以下代码中传递 jsondata 的正确语法是什么-

我正在创建一个登录页面,该页面将读取电子邮件、用户输入的密码条目,并在单击按钮时将 json 数据传递给 rest api

        var myemail = email.Text;
        var mypwd = password.Text;
        string jsonData = @"{""email"" : myemail, ""password"" : mypwd}"; ///SYNTAX ERROR HERE
        var content = new StringContent(jsonData,Encoding.UTF8,"application/json");

        var myHttpClient = new HttpClient();
        var response = await myHttpClient.PostAsync(URL, content);

        var json = await response.Content.ReadAsStringAsync();

        await DisplayAlert(null, json, "Ok"); 

【问题讨论】:

  • var content = new StringContent(jsonData,Encoding.UTF8,application/json"); 你可能忘记了这里的引用,“application/json”
  • 我在“jsonData”有错误。我的实际输入字段没有被传递
  • Syntax error 表示代码错误,与 JSON 或 REST 无关。您发布的代码不会引发任何错误。它包含硬编码值,而不是任何电子邮件或密码。实际代码和实际编译器错误是什么?
  • 在任何情况下,您都不能在没有引用的情况下以 JSON 格式传递文本数据,这意味着 eamil 和密码 需要引号。如果您使用原始输入,任何包含双引号的输入都将导致无效的字符串,并可能将您的应用程序暴露给黑客攻击。 easy 转义输入的方法是使用适当的 JSON 序列化程序,而不是自己构造字符串

标签: c# json xamarin


【解决方案1】:

不要编写自己的 JSON 字符串,尤其是当它们包含用户输入时,因为如果密码包含 "\ 怎么办?

创建一个匿名对象,并让序列化库处理:

var jsonObject = new {
    email = email.Text,
    password = password.Text,
};  

var jsonString = JsonConvert.SerializeObject(jsonObject);

var content = new StringContent(jsonString, Encoding.UTF8, "application/json");

【讨论】:

    猜你喜欢
    • 2021-07-27
    • 2021-12-31
    • 2016-09-16
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多