miałem trzeba to zrobić dzisiaj dla witryny programu SharePoint, który używa Forms Based Authentication (FBA). Jeśli spróbujesz wywołać stronę aplikacji bez klonowania plików cookie i przypisania obiektu CookieContainer, żądanie nie powiedzie się.
wybrałem streszczenie pracy do tej poręcznej metodę rozszerzenia:
public static CookieContainer GetCookieContainer(this System.Web.HttpRequest SourceHttpRequest, System.Net.HttpWebRequest TargetHttpWebRequest)
{
System.Web.HttpCookieCollection sourceCookies = SourceHttpRequest.Cookies;
if (sourceCookies.Count == 0)
return null;
else
{
CookieContainer cookieContainer = new CookieContainer();
for (int i = 0; i < sourceCookies.Count; i++)
{
System.Web.HttpCookie cSource = sourceCookies[i];
Cookie cookieTarget = new Cookie() { Domain = TargetHttpWebRequest.RequestUri.Host,
Name = cSource.Name,
Path = cSource.Path,
Secure = cSource.Secure,
Value = cSource.Value };
cookieContainer.Add(cookieTarget);
}
return cookieContainer;
}
}
Następnie można po prostu zadzwonić z dowolnego obiektu HttpRequest z tarczy HttpWebRequest obiekt jako parametr, na przykład:
HttpWebRequest request;
request = (HttpWebRequest)WebRequest.Create(TargetUrl);
request.Method = "GET";
request.Credentials = CredentialCache.DefaultCredentials;
request.CookieContainer = SourceRequest.GetCookieContainer(request);
request.BeginGetResponse(null, null);
gdzie TargetUrl to adres URL strony, po której się znajdujesz, a SourceRequest to HttpRequest strony, na której aktualnie się znajduję, pobierana przez Page.Request.
Myślę, że ta technika zadziała, ale naprawdę liczyłem na rozwiązanie, które nie wymagałoby kopiowania każdej wartości. – Mike
co z próbą z pustym haczykiem? – CRice
Dobra uwaga, została usunięta. – David