json としてフォーマットされた文字列を wcf restful サービスに渡す際に問題に直面しています。
Http400 エラーが発生します。何が悪いのかわからない。
これが私のコードです
IService.cs
[OperationContract]
[WebInvoke(
Method = "GET",
UriTemplate = "savesomething/{u}",
BodyStyle = WebMessageBodyStyle.WrappedRequest,
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json)]
string SaveSomething(string u);
[DataContract]
public class UserAccount
{
[DataMember(Name = "userid")]
public string UserId
{
get;
set;
}
[DataMember(Name = "password")]
public string Password
{
get;
set;
}
}
Service1.cs
public string SaveSomething(string u)
{
UserAccount ua = Deserialize<UserAccount>(u);
StringBuilder sb = new StringBuilder(string.Empty);
sb.Append(string.Format("UserID : {0}\r\n", ua.UserId));
sb.Append(string.Format("Password : {0}\r\n", ua.Password));
File.WriteAllText(@"D:\\temp\data.txt", sb.ToString());
return "completed!";
}
private static UserAccount Deserialize<UserAccount>(string json)
{
UserAccount obj = Activator.CreateInstance<UserAccount>();
MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json));
DataContractSerializer serializer = new DataContractSerializer(obj.GetType());
obj = (UserAccount)serializer.ReadObject(ms);
ms.Close();
return obj;
}
クライアントの default.cs
protected void Page_Load(object sender, EventArgs e)
{
string serviceUrl = "http://localhost:65085/Service1.svc/savesomething";
MyUser mu = new MyUser();
mu.UserId = "bob";
mu.Password = "bobbypassword";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceUrl);
request.Method = "POST";
request.ContentType = "application/json; charset:utf-8";
DataContractJsonSerializer seria = new DataContractJsonSerializer(mu.GetType());
MemoryStream ms = new MemoryStream();
seria.WriteObject(ms, mu);
String js = Encoding.UTF8.GetString(ms.ToArray());
StreamWriter write = new StreamWriter(request.GetRequestStream());
write.Write(js);
write.Close();
HttpWebResponse resp = request.GetResponse() as HttpWebResponse;
StreamReader stReader = new StreamReader(resp.GetResponseStream());
string jsonStr = stReader.ReadToEnd();
resp.Close();
Response.Write(jsonStr + "<BR>");
}
クライアントの MyUser.cs
public class MyUser
{
public MyUser(){}
public string UserId { get; set; }
public string Password { get; set; }
}