【问题标题】:How to get a Function Parameter from WebAPI Request from HTTPContext?如何从 HTTPContext 的 WebAPI 请求中获取函数参数?
【发布时间】:2021-10-28 14:29:12
【问题描述】:

我有一个名为的 Web API 方法

    GetDetails(int id, string Name, string country)

在 API 中,我需要获取 id 值进行验证,我正在尝试使用以下代码获取原始 JASON,

     using (var reader = new StreamReader(context.Request.Body))
     {
           var body = reader.ReadToEndAsync();
     }

我在变量主体中低于原始数据,如下所示

{"query":"query\n{\n\n GetDetails(id:1234,Name:"lolo",country:"US" { }\n \n}\n"}

我正在尝试使用以下代码对字符串进行反序列化

using (var reader = new StreamReader(context.Request.Body))
{
    var body = reader.ReadToEndAsync();
    string[] theJson = JsonConvert.DeserializeObject<string[]>(body.Result.ToString());
}

我尝试了以下,

IEnumerable<string> strings = JsonConvert.DeserializeObject<IEnumerable<string>>(body.Result.ToString());

我遇到了一个异常:

Newtonsoft.Json.JsonReaderException:解析值时遇到意外字符:S. 路径'',第 0 行,位置 0。 在 Newtonsoft.Json.JsonTextReader.ParseValue() 在 Newtonsoft.Json.JsonReader.ReadAndMoveToContent() 在 Newtonsoft.Json.JsonReader.ReadForType(JsonContract 合同,布尔 hasConverter) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader 阅读器,类型 objectType,布尔 checkAdditionalContent) 在 Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader 阅读器,类型 objectType) 在 Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader 阅读器,类型 objectType) 在 Newtonsoft.Json.JsonConvert.DeserializeObject(字符串值,类型类型,JsonSerializerSettings 设置) 在 Newtonsoft.Json.JsonConvert.DeserializeObject[T](字符串值,JsonSerializerSettings 设置) 在 Newtonsoft.Json.JsonConvert.DeserializeObject[T](字符串值)

如何从上述原始 Json 中获取 id,感谢您的指导。

【问题讨论】:

    标签: json asp.net-core httpcontext


    【解决方案1】:

    首先,您提供的 Json 格式不正确,因此系统无法解析。您可以告诉我们如何将 Json 发送到控制器。

    其次,你可以尝试从 Query 中获取 HTTP 请求中的参数,从请求体中获取参数更容易。第三,如果你必须从请求体中获取参数,我建议你使用模型绑定。这是我的代码:

    1. 创建一个包含你的参数的类:

      public class Test
      {
              public int Id { get; set; }
              public string Name { get; set; }
              public string Country { get; set; }
      }
      
    2. 在控制器方法中使用模型绑定:

      public int ID { get; set; }
      
              [HttpPost]
              [Route("[action]")]
              public void GetDetails([FromBody] Test test)
              {
                  ID = test.Id;
      
              }
      

    3. 将 Json 发送到控制器:

      {
          "Id" : 5,
          "Name" : "Name from Json",
          "Country" : "USA"
      }
      

    然后你会在API action方法中得到Id值。

    【讨论】:

      猜你喜欢
      • 2016-06-16
      • 2019-10-10
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      • 2017-12-14
      • 2019-03-02
      • 2012-01-17
      • 1970-01-01
      相关资源
      最近更新 更多