1

これらの行を使用して、会社のサーバーからデータを取得しています

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Credentials = new NetworkCredential(usr, pass);
ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();      

うまく機能しますが、問題は次のような大きな URL を送信する場合です。

https://172.16.100.1:5002/arx/eventexport?num_events=-1&start_date=1335079800000&end_date=1335382199000&filter=<filter><name><mask>controller.door.closed</mask><mask>controller.notification.digitalOutputChanged</mask><mask>controller.dac.eventBufferOverflow</mask><mask>controller.door.forcedOpen</mask><mask>controller.door.notClosed</mask><mask>controller.door.opened</mask><mask>controller.dac.powerOn</mask><mask>controller.door.pulseOpen</mask><mask>controller.door.pulseOpenRequest</mask><mask>controller.door.requestToExit</mask><mask>controller.reader.duress.alarm</mask><mask>controller.access.card.valid.standard</mask><mask>controller.access.card.invalid.inhibited</mask><mask>controller.access.card.invalid.pin</mask><mask>controller.access.card.invalid.pinMode</mask><mask>controller.access.card.invalid.door</mask><mask>controller.reader.invalid.format</mask><mask>controller.access.card.invalid.operatorControl</mask><mask>controller.access.card.invalid.pinAttempts</mask><mask>controller.access.card.invalid.pinTimeout</mask><mask>controller.access.card.invalid.zone.antipassback</mask><mask>controller.access.card.invalid.time.antipassback</mask><mask>controller.access.card.valid.pin</mask><mask>controller.reader.communicationFailure.active</mask><mask>controller.reader.communicationFailure.restored</mask><mask>controller.intrusionarea.blockingInput.closed</mask><mask>controller.intrusionarea.blockingInput.open</mask><mask>controller.notification.digitalInput1Closed</mask><mask>controller.notification.digitalInput1Opened</mask><mask>controller.dac.input2closed</mask><mask>controller.dac.input2opened</mask><mask>controller.dac.input4closed</mask><mask>controller.dac.input4opened</mask><mask>controller.dac.inputChanged</mask><mask>controller.door.mode.buzzerEnabled</mask><mask>controller.door.mode.conference</mask><mask>controller.door.mode.rteMaintainedUnlock</mask><mask>controller.door.mode.motorlockLowSecurity</mask><mask>controller.door.mode.unlocked</mask><mask>controller.door.mode.access.accessInhibited</mask><mask>controller.door.mode.access.buyAlarmtime</mask><mask>controller.door.mode.access.pinOnlyAllowed</mask><mask>controller.door.mode.access.dualCardsRequired</mask><mask>controller.door.mode.access.pinCardNumber</mask><mask>controller.door.mode.access.modePinRequired</mask><mask>controller.door.mode.access.modeSiteCodeOnly</mask><mask>controller.door.mode.access.apEnabled</mask><mask>controller.door.mode.exit.accessInhibited</mask><mask>controller.door.mode.exit.apEnabled</mask><mask>controller.door.mode.exit.buyAlarmtime</mask><mask>controller.door.mode.exit.dualCardsRequired</mask><mask>controller.door.mode.exit.pinCardNumber</mask><mask>controller.door.mode.exit.pinOnlyAllowed</mask><mask>controller.door.mode.exit.modePinRequired</mask><mask>controller.door.mode.exit.modeSiteCodeOnly</mask><mask>controller.door.motorlock.dayLocked</mask><mask>controller.door.motorlock.initJumperInstalled</mask><mask>controller.door.motorlock.locked</mask><mask>controller.door.motorlock.nightLocked</mask><mask>controller.door.motorlock.tubTurned</mask><mask>controller.door.motorlock.unlocked</mask><mask>controller.door.motorlock.error.encryptionFault</mask><mask>controller.door.motorlock.error.failedToLock</mask><mask>controller.door.motorlock.error.failedToUnlock</mask><mask>controller.door.motorlock.error.problemAtLock</mask><mask>controller.door.motorlock.error.problemAtPermanentUnlock</mask><mask>controller.door.motorlock.error.problemAtUnlock</mask><mask>controller.door.motorlock.error.seriousProblemAtLock</mask><mask>controller.notification.powerFault.active</mask><mask>controller.notification.powerFault.restored</mask><mask>controller.reader.tamper.active</mask><mask>controller.notification.tamper.restored</mask></name></filter>     

私はこの例外を得ました

{"リモート サーバーがエラーを返しました: (414) 要求 URI が大きすぎます。"}

この行で:

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

では、HttpWebRequest で大きな URI を送信するにはどうすればよいでしょうか?

前もって感謝します

4

1 に答える 1

0

414エラーコードはURIが長すぎるためです。前述のように、サポートされているURIの長さは、あなた/あなたの会社がそのサーバーを所有している場合、ニーズに合わせてこの設定を変更できるよりもWebサーバーで設定できます。詳細については、ここで、

しかし、URI の 80% はフィルタ パラメータであるため、ここでアプローチを変更する必要があると思います。そのパラメータを短縮する他の方法を見つける必要があります。そのためには、XML よりも短い JSON を使用でき、データ通信に使用できます。

于 2012-06-05T09:40:52.370 に答える