java - 将 json 对象添加到 Java HttpGet 请求到 C# WebApi

标签 java c# android json asp.net-web-api

我正在尝试将 json 对象从 java 客户端发送到 C# WebApi,但输入参数为 null。 java代码:

    ObjectMapper mapper = new ObjectMapper();
    Gson gson = new Gson();  
    String json = gson.toJson(per);
    HttpClient httpclient = new DefaultHttpClient();
    List<NameValuePair> qparams = new ArrayList<NameValuePair>();
    qparams.add(new BasicNameValuePair("person", json.toString()));
    HttpGet httpPost = new HttpGet("http://naviserver.azurewebsites.net/api/Person/Get?" + URLEncodedUtils.format(qparams, "UTF-8"));
        httpPost.setHeader("Accept", "application/json");
        httpPost.setHeader("Content-type", "application/json");
        httpPost.setHeader(
                "Authorization",
                "Bearer TokenRemovedBecauseUseless");


        org.apache.http.HttpResponse httpResponse = httpclient.execute(httpPost);

WebApi 方法:

    public List<String> Get([FromUri]Person person)
    {}

有人可以告诉我如何发送 json 对象吗?

最佳答案

问题是 WebApi 不期望 JSON 格式的 person 对象。通过将 FromUri 与复杂对象一起使用,期望 url 具有 Person 中每个字段的查询参数。

有一个很好的例子 here关于它是如何工作的。

基本上,您会希望查询参数如下所示:

http://naviserver.azurewebsites.net/api/Person/Get?name=dave&age=30

在 Java 中:

qparams.add(new BasicNameValuePair("name", person.getName()));
qparams.add(new BasicNameValuePair("age", String.valueOf(person.getAge())));

如果您想以 JSON 格式发送人员,更好的方法是使用 HTTP POST 并在正文中设置 JSON。然后在 WebApi 中,您的方法将如下所示:

public HttpResponseMessage Post([FromBody]Person person)

然后,您还必须更改 Java 客户端以发送 POST 请求。

HttpClient httpClient = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost("http://naviserver.azurewebsites.net/api/Person");
Person person = new Person("dave", 30);
Gson gson = new Gson();  
String json = gson.toJson(person);
StringEntity body = new StringEntity(json);
httpPost.setEntity(body);
HttpResponse response = httpClient.execute(httpPost);

关于java - 将 json 对象添加到 Java HttpGet 请求到 C# WebApi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29050795/

相关文章:

java - Intellij 调试器中的 "Step Into"和 "Force Step Into"有什么区别?

java - 从 valueUnbound(HttpSessionBindingEvent event) 方法修改 ServletContext 的属性

c# - WPF - 计算 FlowDocument 的宽度

android - 如何从一个项目创建多个 apk?

java - 多个视频观看一项 Activity

Android - 我应该继续使用 PreferenceActivity 吗?

允许轻松连接 BitSet 的 Java BitSet

java - 字段格式的 Jackson 回滚解析不正确

c# - 一个很好的 C# 集合

c# - 输入.GetButtonDown ("Jump");在 Unity 中不适用于空格键