我一直在絞盡腦汁,不能拿出一個很好的理由,但是當我運行我的vb.net代碼時,它執行得很好。我正在將它重新編譯爲c#(學習過程),並且我在GetResponse
行發現「服務器返回500」錯誤。C#得到500錯誤,VB不?
任何意見都很讚賞!
C#代碼 - 碎
string SpaceURL = "https://1.1.1.1/api/space/device-management/discover-devices";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(SpaceURL);
request.ContentType = "application/vnd.net.juniper.space.device-management.discover-devices+xml;version=1;charset=UTF-8";
request.Accept = "*/*";
request.Headers.Add("Authorization: Basic authcode");
request.Method = "POST";
//Get the request text for stream writer
CommonFunctions objCF = new CommonFunctions();
string strRequest = objCF.SerializeObject(this,true,false);
StreamWriter sw = new StreamWriter(request.GetRequestStream());
sw.Write(strRequest);
HttpWebResponse response;
response = (HttpWebResponse)request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
return sr.ReadToEnd();
VB.net代碼如下
Dim url As String
Dim request As HttpWebRequest
Dim response As HttpWebResponse = Nothing
Dim reader As StreamReader
url = "https://1.1.1.1/api/space/device-management/discover-devices"
request = DirectCast(WebRequest.Create(url), HttpWebRequest)
request.ContentType = "application/vnd.net.juniper.space.device-management.discover-devices+xml;version=1;charset=UTF-8"
request.Accept = "*/*"
request.Headers.Add("Authorization: Basic authcode=")
request.Method = "POST"
Dim requesttext As String = "<systemDiscoveryRule><ruleName>testdiscovery</ruleName><ipAddressDiscoveryTarget><ipAddress>" & txtIPAddress.Text & "</ipAddress></ipAddressDiscoveryTarget><usePing>true</usePing><useSnmp>false</useSnmp><snmpV1Setting><communityName>nsn-space</communityName></snmpV1Setting><manageDiscoveredSystemsFlag>true</manageDiscoveredSystemsFlag><sshCredential><userName>username</userName><password>password</password></sshCredential><tagNewlyManagedDiscoveredSystemsFlag>true</tagNewlyManagedDiscoveredSystemsFlag><tagForNewlyManagedDiscoveredSystems>store-devices</tagForNewlyManagedDiscoveredSystems></systemDiscoveryRule>"
Dim sw As New System.IO.StreamWriter(request.GetRequestStream)
sw.Write(requesttext)
sw.Dispose()
response = DirectCast(request.GetResponse(), HttpWebResponse)
reader = New System.IO.StreamReader(response.GetResponseStream())
我也比較我的內聯XML在C#版本創建的XML序列化,從一類對象工作正常(乾淨多了!)
您不需要在C#版本中刷新寫入器,在VB版本的Dispose中調用'Close',然後調用'Flush'。 '使用'聲明在這裏是你的朋友。不確定這是否是問題,因爲request.Headers.Add'調用在這兩個版本中也有不同的參數。 –
這是**實際**代碼嗎?因爲在那裏有一個明顯的錯字(另見代碼着色) –
' - 「在傳輸和取出真正的授權碼時是一個錯字(搞砸了色彩...對不起) –