Post 带有 JObject 参数
Post with JObject Parameter
我需要调用控制器中定义的 Post 方法,它有一个 JObject 参数。
当我使用 PostAsJsonAsync 或 PostAsync.
调用此方法时,我收到 500 错误代码
下面的代码显示了我如何调用此 Post 方法:
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:54810");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var jsonObject = new JObject();
dynamic json = jsonObject;
json.Add("mytoken", "teste");
json.eventos = new JArray() as dynamic;
dynamic evento = new JObject();
evento.ID = 1;
evento.Latitude = 50;
evento.Longitude = 20;
evento.Local = 30;
json.eventos.Add(evento);
HttpResponseMessage response = await client.PostAsJsonAsync("api/eventocontrole", jsonObject);
response.IsSuccessStatusCode 属性 返回 false。
如果我将此参数类型从 JObject 更改为任何其他自定义 class(例如用户、产品、购物车),属性 IsSuccessStatusCode returns 真!
我是否错误地使用了 JObject?我不应该使用 JObject 作为参数吗?
澄清一下,我使用 JObject 是因为我需要传递一个对象列表和一个令牌字符串来验证我的请求。
尝试将序列化数据发送为 StringContent
:
string jsonData = jsonObject.ToString();
var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync("api/eventocontrole", content);
我无法使用 JObject 之类的参数。
经过多次测试,唯一的解决办法是创建自定义 class
public class RequestData<T>
{
public T data { get; set; }
public string token { get; set; }
}
我下面的测试是调用这个服务器方法:
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:54810");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
List<EventoControle> eventos = new List<EventoControle>();
EventoControle evento = new EventoControle();
evento.ID = 1;
evento.Latitude = 50;
evento.Longitude = 20;
evento.Local = 30;
eventos.Add(evento);
RequestData<List<EventoControle>> rq = new RequestData<List<EventoControle>>();
rq.data = eventos;
rq.token = "teste";
HttpResponseMessage response = await client.PostAsJsonAsync<RequestData<List<EventoControle>>>("api/eventocontrole", rq);
if (response.IsSuccessStatusCode)
{
}
}
我的服务器方法:
public void PostEventoControle(RequestData<List<EventoControle>> json)
我需要调用控制器中定义的 Post 方法,它有一个 JObject 参数。
当我使用 PostAsJsonAsync 或 PostAsync.
调用此方法时,我收到 500 错误代码下面的代码显示了我如何调用此 Post 方法:
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:54810");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var jsonObject = new JObject();
dynamic json = jsonObject;
json.Add("mytoken", "teste");
json.eventos = new JArray() as dynamic;
dynamic evento = new JObject();
evento.ID = 1;
evento.Latitude = 50;
evento.Longitude = 20;
evento.Local = 30;
json.eventos.Add(evento);
HttpResponseMessage response = await client.PostAsJsonAsync("api/eventocontrole", jsonObject);
response.IsSuccessStatusCode 属性 返回 false。
如果我将此参数类型从 JObject 更改为任何其他自定义 class(例如用户、产品、购物车),属性 IsSuccessStatusCode returns 真!
我是否错误地使用了 JObject?我不应该使用 JObject 作为参数吗?
澄清一下,我使用 JObject 是因为我需要传递一个对象列表和一个令牌字符串来验证我的请求。
尝试将序列化数据发送为 StringContent
:
string jsonData = jsonObject.ToString();
var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync("api/eventocontrole", content);
我无法使用 JObject 之类的参数。
经过多次测试,唯一的解决办法是创建自定义 class
public class RequestData<T>
{
public T data { get; set; }
public string token { get; set; }
}
我下面的测试是调用这个服务器方法:
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:54810");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
List<EventoControle> eventos = new List<EventoControle>();
EventoControle evento = new EventoControle();
evento.ID = 1;
evento.Latitude = 50;
evento.Longitude = 20;
evento.Local = 30;
eventos.Add(evento);
RequestData<List<EventoControle>> rq = new RequestData<List<EventoControle>>();
rq.data = eventos;
rq.token = "teste";
HttpResponseMessage response = await client.PostAsJsonAsync<RequestData<List<EventoControle>>>("api/eventocontrole", rq);
if (response.IsSuccessStatusCode)
{
}
}
我的服务器方法:
public void PostEventoControle(RequestData<List<EventoControle>> json)