【发布时间】:2012-11-22 00:31:55
【问题描述】:
我有标准的 asmx 网络服务返回 Json:
private void ReturnUser(string name)
{
User user = new User(name);
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
MemoryStream stream = new MemoryStream();
serializer.WriteObject(stream, @object);
string jsonString = Encoding.UTF8.GetString(stream.ToArray());
stream.Close();
HttpContext.Current.Response.AddHeader("ContentType", "application/json");
HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
HttpContext.Current.Response.Write(jsonString);
HttpContext.Current.Response.End();
}
另一方面,我想试试 webservice 是否正在运行,所以我尝试调用 POST:
string data = "name=test";
byte[] dataStream = Encoding.UTF8.GetBytes(data);
WebRequest request = WebRequest.Create("http://tempuri.org/External.asmx?op=ReturnUser");
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = dataStream.Length;
Stream reqStream = request.GetRequestStream();
reqStream.Write(dataStream, 0, dataStream.Length);
reqStream.Close();
WebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream);
string json = reader.ReadToEnd();
stream.Close();
reader.Close();
Console.Write(json);
Console.Read();
但我得到错误 500。从浏览器中运行的 web 服务就像一个魅力:(
【问题讨论】:
-
错误 500 有时是由您的 .asmx 方法中的错误引起的。还要检查使用的身份验证。
-
只是好奇,但您为什么要手动将其序列化为 JSON 并直接写入响应?如果它是 ASMX 服务,您应该能够将其添加到方法中并从返回值中获取 JSON 响应:[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
-
我尝试使用 [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 但它返回了 XML。直到后来我才读到它只适用于 AJAX 或 jQuery,但我打算从非 .net 移动设备调用它。
标签: c# json web-services post