WCF Post Operation Contract返回400个错误请求
本文关键字:400个 错误 请求 返回 Contract Post Operation WCF | 更新日期: 2023-09-27 18:11:29
我有一个WCF服务,当我尝试通过post发送json和我的操作合同有一个参数时,我收到400个错误请求。
注意:如果我的操作合同中没有这样的参数。同样的请求可以完美地工作。
[OperationContract]//不带参数的工作正常。bool AddCadastroJSon ();
[OperationContract]bool AddCadastroJSon(字符串json);//参数为400的错误请求
My Contract
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);
}
}
My HttpManager In Android
/**
* 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天了,但还是解决不了这个问题
解决此问题使用与主端点相同的配置配置客户端端点
更改端点配置以接收wrapped,
修改我的数据合约接收流和反序列化后。
public bool AddCadastroJSon(Stream stream)
{
//Esse metodo recebe um stream pois a configuração o wcf não realiza o bind para a classe desejada.
StreamReader reader = new StreamReader(stream);
String JSONdata = reader.ReadToEnd();
JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
Cadastro cadastro = jsonSerializer.Deserialize<Cadastro>(JSONdata);
var cadastroDao = new CadastroDao();
return cadastroDao.AddCadastro(cadastro);
}
如果你改变你的接收流,你需要删除标题在你的android请求。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 = "{'"cadastro'":["+json.toString()+"]}";
//String params =json.toString();
if (p.getMethod().equals("POST")) {
con.setDoOutput(true);
//con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
//con.setRequestProperty("Content-Type", "application/json");
//con.setRequestProperty("Accept" , "application/json");
//OutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream());
OutputStream os = con.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(p.getGson());
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;
}
}
}