Вот как я сегодня решил эту проблему. Я начал с этой статьи о C # Corner , но нашедший пример - пока технически исправный - немного неполный. Все, что он сказал, было правильным, но мне нужно было поразить несколько внешних сайтов, чтобы собрать все воедино и работать именно так, как я хотел.
Не помогло то, что пользователь технически вообще не отправлял форму; они щелкали ссылку, чтобы перейти в наш центр поддержки, но для того, чтобы зарегистрировать их в http-сообщение, нужно было направить на сайт центра поддержки.
Это решение включает использование HttpContext.Current.Response.Write() для записи данных для формы, а затем использование фрагмента Javascript в методе <body onload=""> для отправки формы по правильному URL-адресу.
Когда пользователь щелкает ссылку Центра поддержки, вызывается следующий метод для записи ответа и перенаправления пользователя:
public static void PassthroughAuthentication()
{
System.Web.HttpContext.Current.Response.Write("<body
onload=document.forms[0].submit();window.location=\"Home.aspx\";>");
System.Web.HttpContext.Current.Response.Write("<form name=\"Form\"
target=_blank method=post
action=\"https://external-url.com/security.asp\">");
System.Web.HttpContext.Current.Response.Write(string.Format("<input
type=hidden name=\"cFName\" value=\"{0}\">", "Username"));
System.Web.HttpContext.Current.Response.Write("</form>");
System.Web.HttpContext.Current.Response.Write("</body>");
}
Ключ к этому методу заключается в том бите загрузки Javascript, который при загрузке тела страницы отправляет форму и затем перенаправляет пользователя обратно на мою домашнюю страницу. Причина этого каприза в том, что я запускаю внешний сайт в новом окне, но не хочу, чтобы пользователь повторно отправлял скрытую форму, если они обновят страницу. Плюс эта скрытая форма сдвинула страницу на несколько пикселей вниз, что действовало мне на нервы.
Я был бы очень заинтересован в любых чистых идеях, которые есть у кого-нибудь по этому поводу.
Эрик Сиппл
person
saalon
schedule
07.08.2008