[英]POST to Json webervice is returning Error 500
我有標准的asmx webservice返回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();
}
另一方面,我想嘗試該Web服務正在運行,因此我嘗試調用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系列錯誤是安全性或權限錯誤。 由於出現500錯誤,因此至少與服務器具有完全連接。
顯然,永遠不會調用您的代碼,因為它不會生成500錯誤-因此您所依賴的服務器層正在執行此操作。 聞起來像權限或安全性。
服務器應該發回告訴發生了什么的文本。 檢查響應主體以獲取更多信息。 它也可能有幫助的本地日志記錄。
我必須用.NET代碼解決類似的問題。 我需要通過HTTP從服務器獲取信息,但是它需要身份驗證。 我無法使用Kerberos或基本身份驗證之類的任何集成安全性方法,因為我使用的服務器基於Cookie(有時稱為基於表單)身份驗證。
如果您遇到該問題,則可能會有所幫助: .NET-使用基於表單的身份驗證在(Domino)服務器上使用HTTP服務
我的服務器是Domino,但是這個想法適用於任何HTTP服務器。
嘗試這個,
WebRequest request = WebRequest.Create("http://tempuri.org/External.asmx");
request.Headers.Add("SOAPAction", "\"http://tempuri.org/ReturnUser\"");
最后,我解決了這個問題,可能對其他人有幫助:
string data = "name=test";
byte[] dataStream = Encoding.UTF8.GetBytes(data);
WebRequest request = WebRequest.Create("http://tempuri:org/External.asmx/ReturnUser");
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
Stream stream = request.GetRequestStream();
stream.Write(dataStream, 0, dataStream.Length);
stream.Close();
WebResponse response = request.GetResponse();
Stream respStream = response.GetResponseStream();
StreamReader reader = new StreamReader(respStream);
string json = reader.ReadToEnd();
stream.Close();
reader.Close();
謝謝大家
Web服務需要使用POST請求明確指定的表單操作值。 因此,請嘗試將表單“操作” URL添加到您的POST請求中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.