【发布时间】:2015-09-05 00:26:41
【问题描述】:
我有一个 WCF 服务,当我尝试通过邮寄方式发送 json 并且我的操作合同有一个参数时,我收到 400 错误请求。
Obs:如果我的操作合同中没有这样的参数。相同的请求完美地工作。
[OperationContract] //无参数工作正常。 bool AddCadastroJSON();
[操作合同] bool AddCadastroJSON(String json); //带参数 400 错误请求。
我的合同
namespace CadastroTelefonesService
{
[ServiceContract]
public interface ICadastro
{
[WebInvoke(Method = "GET", ResponseFormat =WebMessageFormat.Json,UriTemplate = "addcliente/{nome};{telefone}")]
[OperationContract]
bool AddCadastro(String nome, String telefone);
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, UriTemplate = "listacliente")]
[OperationContract]
List<Cadastro> Lista();
[WebInvoke(Method = "POST",ResponseFormat = WebMessageFormat.Json,RequestFormat = WebMessageFormat.Json,UriTemplate = "addclientejson" )]
[OperationContract]
bool AddCadastroJSon(String cadastro);
}
}
我在 Android 中的 HttpManager
/**
* Created by Gabriel Santana on 8/26/2015.
* Classe Responsável por fazer requisições HTTP e retornar um Request Package com o content.
*
*/
public class HttpManager {
public static String getData(RequestPackage p) {
BufferedReader reader = null;
HttpURLConnection con=null;
//OkHttpClient client=null;
URL url;
String uri = p.getUri();
if (p.getMethod().equals("GET")) {
uri += "?" + p.getEncodedParams();
}
try {
url = new URL(uri);
con = (HttpURLConnection) url.openConnection();
//client = new OkHttpClient();
// con = client.open(url);
con.setRequestMethod(p.getMethod());
JSONObject json = new JSONObject(p.getParams());
String params = "params="+json.toString();
if (p.getMethod().equals("POST")) {
con.setDoOutput(true);
con.setRequestProperty("Accept" , "application/json");
con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
//OutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream());
OutputStream os = con.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(params);
writer.flush();
writer.close();
os.close();
}
StringBuilder sb = new StringBuilder();
reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
Log.i("fudeu",con.getResponseMessage()+con.getResponseCode());
return sb.toString();
} catch (Exception e) {
try {
Log.i("fudeu",con.getResponseMessage()+con.getResponseCode());
} catch (IOException e1) {
e1.printStackTrace();
}
e.printStackTrace();
return null;
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
}
}
我已经尝试了 3 天,但我无法解决这个问题。
【问题讨论】:
标签: java c# android web-services wcf