2011-04-06 19 views
12

Tengo una aplicación ASP.NET donde yo estoy tratando de salida de la página aspx locales visitado previamente a HTML (es un informe y quiero guardar una copia HTML estático de ella como un archivo). Almaceno el URI de la página local con:WebRequest.GetResponse() es tirar de error 401: no autorizado

Session["SummaryURI"] = Request.Url.AbsoluteUri; 

y luego en la siguiente página recupero con:

string url = Session["SummaryURI"].ToString(); 

url = url.Replace("static=false", "static=true"); 
//MessageLabel.Text = url; 

//CREATE THE NEW FILE 
WebRequest req = WebRequest.Create(url); 
WebResponse res = req.GetResponse(); 

La parte req.GetResponse() es donde yo estoy haciendo mi error (401 Unauthorized).

¿Necesito configurar algo en IIS para permitir esto?

¿Debo editar los permisos del archivo o algo así?

Gracias por su ayuda

Por cierto que esto funciona muy bien en mi local de IIS pero no en mi servidor de prueba.

+0

mira esto http://social.technet.microsoft.com/Forums/ es/winserversecurity/thread/c9239a89-fbee-4adc-b72f-7a6a9648331f – Aristos

Respuesta

3

A partir de ahora que no tienen acceso a la configuración de IIS así que no podía permitir que Anonymous Authentication que es muy posible que la razón por la respuesta de Cybernate no funcionaba para mí. Sin embargo, encontré un método más simple que funcionó. En lugar de usar un WebRequest encontré que podía hacer lo mismo con Server.Execute. A continuación es mi nueva solución:

string strHTML = String.Empty; 
using (var sw = new StringWriter()) 
{ 
    Server.Execute([path-to-local-aspx], sw); 
    strHTML = sw.ToString(); 
} 

string relativeReportPath = [relative-path-to-new-html-file]; 

using (StreamWriter writer = File.CreateText(Server.MapPath(relativeReportPath))) 
{ 
    writer.WriteLine(strHTML); 
    MessageLabel.Text = "Your report is ready. Click Close to close the window."; 
} 
+0

Acabo de notar que obtuve algunos votos negativos para esto. Obviamente, esto es viejo, pero ¿alguien podría explicar por qué votaron negativamente? Gracias. – Daniel

+0

Supongo que su solución funciona bien en su situación, la mayoría de nosotros termina buscando una solución en la que la solución @Daniel sea la correcta. De todos modos, no voté por el suyo, es solo una suposición de por qué alguien hubiera votado el suyo. – Esen

9

Creo que el problema se debe a la autenticación en el servidor de prueba IIS. dos opciones:

1) Activar "Autenticación anónima" para el sitio en el servidor IIS prueba.

2) (Recomendado) Antes de realizar la solicitud al servidor de prueba, utilice la siguiente plantilla de código con el nombre de usuario/contraseña/información de dominio correctos que pueden autenticarse en el servidor de prueba.

System.Net.NetworkCredential netCredential = 
     new System.Net.NetworkCredential("<USER_NAME>", "<PASSWORD>", "<DOMAIN>"); 
req.Credentials = netCredential; 
+1

Lamento tanto tardar en responder, que acabo de regresar a este error. ¿Funcionará esto si estamos usando autenticación NT? Intenté pasar mi nombre de usuario y contraseña, y todavía no funciona. – Daniel

+0

Creo que es importante señalar que el código anterior para # 2 funcionará bien con una advertencia. Asegúrese de no tener la propiedad "UseDefaultCredientials" (por ejemplo, UseDefaultCredientials = false;) después de la línea especificada anteriormente. Hacer esto efectivamente "limpiará" los credientes que acaba de establecer. – Bham503

18

Si no puede habilitar la autenticación anónima, trate de añadir esto a su WebRequest:

req.UseDefaultCredentials = true; 
req.PreAuthenticate = true; 
req.Credentials = CredentialCache.DefaultCredentials; 
+0

Funcionó como un amuleto, observe el uso de las credenciales predeterminadas de la memoria caché, sería útil cierta información adicional sobre por qué. – Niklas

Cuestiones relacionadas