C# 如何在客户端设置请求主体
假设我使用C#和.NET使用以下web方法:C# 如何在客户端设置请求主体,c#,wcf,http,rest,C#,Wcf,Http,Rest,假设我使用C#和.NET使用以下web方法: [WebInvoke(UriTemplage="/users", Method="POST")] [OperationContract] public User AddNewUser(User u); 当您实现POST web方法时,您将接受请求正文作为传入HTTP请求消息的一部分。参数u应该从传入的HTTP消息体反序列化 我的问题是:我们如何在客户端设置这个请求主体?必须把它放在某个地方。这真让我困惑 除了在WebInvoke中添加“Respon
[WebInvoke(UriTemplage="/users", Method="POST")]
[OperationContract]
public User AddNewUser(User u);
当您实现POST web方法时,您将接受请求正文作为传入HTTP请求消息的一部分。参数u应该从传入的HTTP消息体反序列化
我的问题是:我们如何在客户端设置这个请求主体?必须把它放在某个地方。这真让我困惑
除了在WebInvoke中添加“ResponseFormat=WebMessageFormat.Json”之外,如何将返回的Json字符串反序列化到用户对象中?
谢谢 你的问题不能说明你做了什么。如果在客户端上使用.net,则可以使用获取序列化数据 然后,您可以使用,方法设置为POST。 将序列化数据添加到web请求并使用GetResponse()方法
或者,您可以使用创建的请求来测试web服务。它为您提供了一个关于服务器的精确视图。要对您的WCF Rest方法执行POST请求,请执行以下操作:
private string UseHttpWebApproach<T>(string serviceUrl, string resourceUrl, string method, T requestBody)
{
string responseMessage = null;
var request = WebRequest.Create(string.Concat(serviceUrl, resourceUrl)) as HttpWebRequest;
if (request != null)
{
request.ContentType = "application/json";
request.Method = method;
}
if(method == "POST" && requestBody != null)
{
byte[] requestBodyBytes = ToByteArrayUsingJsonContractSer(requestBody);
request.ContentLength = requestBodyBytes.Length;
using (Stream postStream = request.GetRequestStream())
postStream.Write(requestBodyBytes, 0, requestBodyBytes.Length);
}
if (request != null)
{
var response = request.GetResponse() as HttpWebResponse;
if(response.StatusCode == HttpStatusCode.OK)
{
Stream responseStream = response.GetResponseStream();
if (responseStream != null)
{
var reader = new StreamReader(responseStream);
responseMessage = reader.ReadToEnd();
}
}
else
{
responseMessage = response.StatusDescription;
}
}
return responseMessage;
}
private static byte[] ToByteArrayUsingJsonContractSer<T> (T requestBody)
{
byte[] bytes = null;
var serializer1 = new DataContractJsonSerializer(typeof(T));
var ms1 = new MemoryStream();
serializer1.WriteObject(ms1, requestBody);
ms1.Position = 0;
var reader = new StreamReader(ms1);
bytes = ms1.ToArray();
return bytes;
}
要调用上述方法,请执行以下操作:
User objUser = new objUser();
objUser.Username = "Test";
objUser.Password = "Test";
UseHttpWebApproach<User>(serviceBaseUrl, "users", "POST", objUser);
User objUser=new objUser();
objUser.Username=“测试”;
objUser.Password=“测试”;
UseHttpWebApproach(serviceBaseUrl,“用户”,“帖子”,objUser);
您的响应消息是一个字符串。如何从中获取用户对象?谢谢您需要使用DataContractSerializer将字符串数据反序列化到对象实例中。如果请求正文包含一些敏感数据,如用户密码,如何确保安全性?您可以在服务器上使用Https和ssl。如果你真的想强化安全性,你也可以使用服务器发布的时间敏感哈希加密密码,可能是基于用户IP的,但这超出了这个问题的范围。如果这些答案对你有帮助,那么请花时间奖励答案。
User objUser = new objUser();
objUser.Username = "Test";
objUser.Password = "Test";
UseHttpWebApproach<User>(serviceBaseUrl, "users", "POST", objUser);