簡體   English   中英

POST到Json Webervice返回錯誤500

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM