tuve la necesidad de hacer esto hoy en día para un sitio de SharePoint que utiliza la autenticación basada en formularios (FBA). Si intentas llamar a una página de aplicación sin clonar las cookies y asignar un objeto CookieContainer, la solicitud fallará.
me eligieron para abstraer el trabajo a este práctico método de extensión:
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;
}
}
continuación, puede simplemente llamar desde cualquier objeto HttpRequest con un objetivo HttpWebRequest objeto como un parámetro, por ejemplo:
HttpWebRequest request;
request = (HttpWebRequest)WebRequest.Create(TargetUrl);
request.Method = "GET";
request.Credentials = CredentialCache.DefaultCredentials;
request.CookieContainer = SourceRequest.GetCookieContainer(request);
request.BeginGetResponse(null, null);
donde TargetUrl es la URL de la página que estoy buscando y SourceRequest es la HttpRequest de la página en la que estoy actualmente, recuperada a través de Page.Request.
Creo que esta técnica funcionará, pero realmente estaba esperando una solución que no implique copiar cada valor. – Mike
¿Qué pasa con el intento con la captura vacía? – CRice
buen punto, eso ha sido eliminado. – David