2

私はこれについて頭を悩ませてきましたが、正当な理由を思いつくことはできませんが、vb.net コードを実行すると問題なく実行されます。私はそれをC#(学習プロセス)に作り直していましたが、その行で「サーバーが500を返しました」というエラーが発生しましたGetResponse

どんなアドバイスでも大歓迎です!

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 と比較しました (はるかにクリーンです!)。

4

2 に答える 2

1

アダム・ホールズワースが言ったように

C# バージョンではライターをフラッシュしませんが、VB バージョンでは you Disposeが呼び出さCloseれ、次に が呼び出されますFlush。using ステートメントは、ここでの友達です。request.Headers.Add 呼び出しにも 2 つのバージョンで異なる引数があるため、これが問題かどうかはわかりません。

于 2013-07-15T16:26:08.050 に答える