Как использовать HTTP-сервис, который возвращает HTML вместо URL в C # - PullRequest
0 голосов
/ 12 января 2019

Мне поручено использовать услугу другой компании (Компания B) в приложении Silverlight моей компании (Компания A). Это включает в себя то, что компания A отправляет объект виджета в службу Copmany B, а в определенный момент вперед и назад открывает новое окно браузера, которое автоматически перенаправляет пользователей в компании A на клиентский портал компании B, где они обнаруживают предварительно заполненные свойства размещенного объекта. в веб-форме. Данные в веб-форме могут быть изменены в случае необходимости, а затем, наконец, переданы в черный ящик какой-либо компании B.

ЧАСТЬ A

Хотя в этом сценарии нет ничего нового, я привык интегрироваться со службами, которые перенаправляют, отвечая на запрос POST с фактическим URL, который мы затем используем для открытия нового окна браузера. Служба компании B, однако, очевидно, предназначена для возврата всей строки чистого HTML! Пример кода автоматического входа в систему Компании B, который мне дали, представляет собой просто краткую html-страницу, и этот код выглядит примерно так (подробности опущены, включая кнопку, метки и шаблон javascript):

<form action="https://CompanyBClientPortal/endpoint" method="post">
  <input type="hidden" id="clientID" value="xxxxxxx">
  <input type="hidden" id="key" value="yyyyyyy">   
</form> 

При запуске этот образец html / javascript открывает клиентский портал компании B в новом окне, и, действительно, он автоматически регистрируется при его открытии. Я на самом деле не делаю javascript, но очевидно, что clientID и значения ключей публикуются в URL, и каким-то образом одно автоматически перенаправляется в html, возвращаемый одним нажатием кнопки.

Проблема в том, что мне не понятно, как реализовать это в silverlight / C #. Создание POST в C # не является проблемой, но что именно нужно делать, когда ответ, скажем, на HttpWebRequest является действительной строкой html? Опять же, я ожидаю получить URL-адрес (возможно, с новым идентификатором токена или добавленным к нему значением), который я затем смогу открыть из приложения.

Если честно, я могу проанализировать ResponseURI из объекта WebResponse. Но мне любопытно, есть ли способ использовать html и - не просто визуализировать html - но и перемещать на эту страницу по сети, сохраняя все учетные данные без изменений. Безусловно, переписка от компании B указывает на то, что они ожидают, что клиенты будут использовать HTML, возвращаемый их службой. Конечно, они не знают, какой язык мы используем.

Одним словом, как вы в идеале используете такой сервис в C # и как javascript делает это, как если бы он был волшебным?

ЧАСТЬ B

Существует дополнительное любопытство, что хотя чистый HTTP-пример образца html / javascript в PostMan работает ....

POST  https://CompanyBClientPortal/endpoint
Content-Type: application/x-www-form-urlencoded
clientid=xxxxxxxxxx&key=yyyyyyyyyyyyy
...

Возвращает 200 УСПЕХОВ с правильным html. Точно такой же POST в Fiddler возвращает 302 НАЙДЕННЫЙ с правильным url, скрытым в заголовке Location. Я не шучу.

Кроме того, независимо от того, реализую ли я Postman POST как HttpWebRequest или с WebClient, реализация в C# работает не полностью. На самом деле он возвращается 200, но каким-то образом учетные данные утеряны или не распознаны, или что-то в этом роде, потому что возвращаемое html - это страница общей страницы компании B, в которой пользователь просит войти в систему.

Одним словом, что может объяснить этот пост ...

  1. работает в html-образце
  2. работает в Почтальоне
  3. не работает в C #
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...