Как я могу получить запрос WebClient на использование того же сеанса из исходного запроса?

Таким образом, делается запрос к контроллеру / действию ASP.net MVC. С этим связан сеанс. В рамках действия мы создаем экземпляр объекта WebClient и вызываем ресурс, который находится на том же сайте.

Однако, несмотря на то, что это тот же сайт, тот же пул приложений, поскольку WebClient создает новый запрос, у него другой сеанс. (Я знаю, что вы думаете, если он находится в том же пуле приложений, на том же сайте, зачем нужен WebClient). Я оставил эти детали, чтобы не мутить воду, но для WebClient есть причина.

Насколько я понимаю, если веб-клиенту могут быть назначены файлы cookie из исходной коллекции Request.Cookies, то ASP.net сможет искать существующий сеанс на основе существующих файлов cookie.

Думаю, есть 2 вопроса:

  1. Это правильно, и если бы я должен был назначить файлы cookie (каким-то образом) веб-клиенту, запрос, созданный веб-клиентом, в конечном итоге получил бы сеанс исходного запроса.
  2. Как я могу назначить текущий Request.Cookies WebClient?

ОБНОВЛЕНИЕ

Я просмотрел и попробовал как Использование CookieContainer с классом WebClient, так и Отправка файлов cookie с использованием HttpCookieCollection и CookieContainer, и я не нашел рабочего решения.

У нас есть связанное решение Umbraco и asp.net MVC, и мы используем веб-клиент, чтобы сделать запрос в Umbraco для страницы. В своем исследовании я также обнаружил, что могут быть другие факты, которые могут привести к тому, что файлы cookie не будут работать так, как я описал выше. Итак, я предполагаю, что первая задача - выяснить, позволит ли весь бит о файлах cookie получить исходный сеанс? Или есть лучший способ сделать то, что мы делаем?


person pghtech    schedule 24.08.2012    source источник


Ответы (1)


Возможно, вы можете попробовать реализацию, показанную здесь:

Отправка файлов cookie с помощью HttpCookieCollection и CookieContainer

Он копирует входящие файлы cookie в исходящий внешний запрос. Однако эта реализация предназначена для использования HttpWebRequest. Если вместо этого вам действительно нужно использовать WebClient, это может быть полезно: Использование CookieContainer с классом WebClient

person Pablo Romeo    schedule 24.08.2012
comment
Я просмотрел оба сообщения. Я обновляю свой вопрос, чтобы добавить больше контекста к тому, что я пытаюсь сделать. - person pghtech; 25.08.2012
comment
Я не знаком с Umbraco, но AFAIK для ASP.NET, если вы пересылаете файлы cookie, которых должно быть достаточно для идентификации сеанса. Возможно, Umbraco реализует дополнительные проверки, такие как, возможно, входящий IP или что-то в этом роде, чтобы избежать перехвата сеанса. Где во время ваших тестов все файлы cookie, которые обычно отправляются в Umbraco, также присутствуют при копировании? - person Pablo Romeo; 25.08.2012
comment
Будет ли получение контента на стороне клиента через js и ajax не подходящей альтернативой, или вам нужно изменить или обработать результат на стороне сервера? Вы достигли бы аналогичного результата, но избегаете ручной обработки файлов cookie и двойного запроса для доступа к содержимому. - person Pablo Romeo; 25.08.2012
comment
К счастью, я нашел способ с помощью объектов WebRequest и WebClient получить сеанс с тем же SessionID, но похоже, что Umbraco CMS заставляет его оставаться новым сеансом (IsSessionNew = true). Отметьте этот ответ, как он поможет кому-нибудь приблизиться. - person pghtech; 28.08.2012