Мне поручено использовать услугу другой компании (Компания 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, в которой пользователь просит войти в систему.
Одним словом, что может объяснить этот пост ...
- работает в html-образце
- работает в Почтальоне
- не работает в C #