2013-07-15 33 views
2

我一直在絞盡腦汁,不能拿出一個很好的理由,但是當我運行我的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序列化,從一類對象工作正常(乾淨多了!)

+3

您不需要在C#版本中刷新寫入器,在VB版本的Dispose中調用'Close',然後調用'Flush'。 '使用'聲明在這裏是你的朋友。不確定這是否是問題,因爲request.Headers.Add'調用在這兩個版本中也有不同的參數。 –

+0

這是**實際**代碼嗎?因爲在那裏有一個明顯的錯字(另見代碼着色) –

+0

' - 「在傳輸和取出真正的授權碼時是一個錯字(搞砸了色彩...對不起) –

回答

4

您可以檢查此行

request.Headers.Add("Authorization: Basic authcode'); 

應該讀

request.Headers.Add("Authorization: Basic authcode"); 

它具有不匹配的引號。

1

正如亞當Houldsworth說

你不刷新在C#版本的作家,在VB的版本,你 Dispose,它將調用Close,進而調用Flush。 使用聲明是你的朋友在這裏。不知道這是否是問題,因爲 request.Headers.Add調用在兩個 版本中也有不同的參數。