如何从 HTTPContext 的 WebAPI 请求中获取函数参数?
How to get a Function Parameter from WebAPI Request from HTTPContext?
我有一个名为 API 的 Web 方法
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: Unexpected character encountered while parsing value: S. Path '', line 0, position 0.
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonReader.ReadAndMoveToContent()
at Newtonsoft.Json.JsonReader.ReadForType(JsonContract contract, Boolean hasConverter)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
如何从上面的原始文件中获取 id Json,感谢您的指导。
首先,您提供的Json格式不正确,系统无法解析。您可以告诉我们如何将 Json 发送到控制器。
其次,你可以尝试从Query中获取HTTP请求中的参数,从请求体中获取参数更容易。第三,如果你必须从请求体中获取参数,我建议你使用模型绑定。这是我的代码:
创建一个class包含你的参数:
public class Test
{
public int Id { get; set; }
public string Name { get; set; }
public string Country { get; set; }
}
在控制器方法中使用模型绑定:
public int ID { get; set; }
[HttpPost]
[Route("[action]")]
public void GetDetails([FromBody] Test test)
{
ID = test.Id;
}
发送Json到控制器:
{
"Id" : 5,
"Name" : "Name from Json",
"Country" : "USA"
}
然后在APIaction方法中获取Id值
我有一个名为 API 的 Web 方法
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: Unexpected character encountered while parsing value: S. Path '', line 0, position 0. at Newtonsoft.Json.JsonTextReader.ParseValue() at Newtonsoft.Json.JsonReader.ReadAndMoveToContent() at Newtonsoft.Json.JsonReader.ReadForType(JsonContract contract, Boolean hasConverter) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent) at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType) at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType) at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings) at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings) at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
如何从上面的原始文件中获取 id Json,感谢您的指导。
首先,您提供的Json格式不正确,系统无法解析。您可以告诉我们如何将 Json 发送到控制器。
其次,你可以尝试从Query中获取HTTP请求中的参数,从请求体中获取参数更容易。第三,如果你必须从请求体中获取参数,我建议你使用模型绑定。这是我的代码:
创建一个class包含你的参数:
public class Test { public int Id { get; set; } public string Name { get; set; } public string Country { get; set; } }
在控制器方法中使用模型绑定:
public int ID { get; set; } [HttpPost] [Route("[action]")] public void GetDetails([FromBody] Test test) { ID = test.Id; }
发送Json到控制器:
{ "Id" : 5, "Name" : "Name from Json", "Country" : "USA" }
然后在APIaction方法中获取Id值