ho avuto la necessità di fare questo oggi per un sito di SharePoint che utilizza autenticazione basata su form (FBA). Se si tenta di chiamare una pagina dell'applicazione senza clonare i cookie e assegnare un oggetto CookieContainer, la richiesta avrà esito negativo.
ho scelto di astrarre il lavoro a questo metodo di estensione a portata di mano:
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;
}
}
È quindi possibile chiamare da qualsiasi oggetto HttpRequest con un target HttpWebRequest oggetto come un parametro, ad esempio:
HttpWebRequest request;
request = (HttpWebRequest)WebRequest.Create(TargetUrl);
request.Method = "GET";
request.Credentials = CredentialCache.DefaultCredentials;
request.CookieContainer = SourceRequest.GetCookieContainer(request);
request.BeginGetResponse(null, null);
dove TargetUrl è l'URL della pagina I am after e SourceRequest è la HttpRequest della pagina I am on attualmente, recuperata tramite Page.Request.
fonte
2013-05-28 00:46:57
Penso che questa tecnica funzionerà, ma speravo davvero in una soluzione che non implicasse la copia di ciascun valore. – Mike
che cosa è con la prova con il fermo vuoto? – CRice
buon punto, che è stato rimosso. – David